저작권 안내
- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
슬라이스 사용하기
이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07
부분 슬라이스 만들기
슬라이스는 기존 슬라이스에서 일정 위치를 지정하여 부분 슬라이스를 만들 수 있습니다.
- 슬라이스[시작_인덱스:끝_인덱스]
a := []int{1, 2, 3, 4, 5}
b := a[0:5] // a의 인덱스 0부터 5까지 참조
fmt.Println(a) // [1 2 3 4 5]
fmt.Println(b) // [1 2 3 4 5]
실행 결과
[1 2 3 4 5]
[1 2 3 4 5]
부분 슬라이스는 슬라이스의 시작 인덱스부터 끝 인덱스까지 일부만 참조합니다. 여기서 끝 인덱스는 실제 인덱스보다 1이 더 많습니다. 따라서 길이가 5인 슬라이스를 처음부터 끝까지 모두 참조하려면 [0:4]가 아닌 [0:5]가 됩니다. 또한, 부분 슬라이스를 만들더라도 슬라이스의 요소는 복사되지 않으므로 부분 슬라이스의 내용을 바꾸면 기존 슬라이스의 내용도 바뀝니다.
다음은 시작 인덱스와 끝 인덱스를 설정하여 일부만 참조하였습니다.
a := []int{1, 2, 3, 4, 5}
fmt.Println(a[0:3]) // [1 2 3]
fmt.Println(a[1:3]) // [2 3]
fmt.Println(a[2:5]) // [3 4 5]
실행 결과
[1 2 3]
[2 3]
[3 4 5]
부분 슬라이스를 생성할 때 시작 인덱스와 끝 인덱스는 생략할 수 있습니다. 시작 인덱스를 생략하면 0으로 지정되고, 끝 인덱스를 생략하면 슬라이스의 길이가 들어갑니다.
a := []int{1, 2, 3, 4, 5}
fmt.Println(a[:]) // [1 2 3 4 5]
fmt.Println(a[0:]) // [1 2 3 4 5]
fmt.Println(a[:5]) // [1 2 3 4 5]
fmt.Println(a[0:len(a)]) // [1 2 3 4 5]
fmt.Println(a[3:]) // [4 5]
fmt.Println(a[:3]) // [1 2 3]
fmt.Println(a[1:3]) // [2 3]
실행 결과
[1 2 3 4 5]
[1 2 3 4 5]
[1 2 3 4 5]
[1 2 3 4 5]
[4 5]
[1 2 3]
[2 3]
이 부분 슬라이스는 슬라이스뿐만 아니라 배열에도 사용할 수 있습니다. 물론 참조이기 때문에 배열이라도 부분 슬라이스의 요소를 바꾸면 배열의 요소도 바뀝니다.
a := [5]int{1, 2, 3, 4, 5} // 배열 선언
b := a[:2] // 배열 a의 일부를 부분 슬라이스로 참조
b[0] = 9 // 부분 슬라이스는 참조이므로 a[0], b[0]의 값이 모두 바뀜
fmt.Println(a) // [9 2 3 4 5]
fmt.Println(b) // [9 2]
실행 결과
[9 2 3 4 5]
[9 2]
부분 슬라이스를 만들면서 용량도 함께 지정할 수 있습니다.
- 슬라이스[시작_인덱스:끝_인덱스:용량]
a := []int{1, 2, 3, 4, 5, 6, 7, 8}
b := a[0:6:8] // 인덱스 0부터 6까지 가져와서 부분 슬라이스로 만들고 용량을 8로 설정
fmt.Println(len(b), cap(b)) // 6 8: 길이가 6이며 용량이 8인 슬라이스
fmt.Println(b) // [1 2 3 4 5 6]
실행 결과
6 8
[1 2 3 4 5 6]
인덱스 0부터 인덱스 6까지 가져와서 부분 슬라이스를 만들지만 용량은 8로 설정합니다. 단 용량을 설정할 때 기존 슬라이스의 용량을 넘을 수는 없습니다.
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.