항목 삭제 후 슬라이스의 용량
Go에서 슬라이스로 작업할 때 항목 유형에 따라 용량이 어떻게 변하는지 이해하는 것이 중요합니다. 수정이 이루어졌습니다. 이를 설명하기 위해 코드 조각과 해당 출력을 살펴보겠습니다.
package main import "fmt" func main() { s := []int{2, 3, 5, 7, 11, 13} printSlice(s) // Drop its last two values s = s[:len(s)-2] printSlice(s) // Drop its first two values. s = s[2:] printSlice(s) } func printSlice(s []int) { fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s) }
출력:
len=6 cap=6 [2 3 5 7 11 13] len=4 cap=6 [2 3 5 7] len=2 cap=4 [5 7]
항목을 떨어뜨린 후 용량이 다른 이유는 무엇입니까?
슬라이스에서 마지막 두 항목(s = s[:len(s)-2])을 삭제할 때 용량은 6으로 변경되지 않고 처음 두 항목(s = s[2:])을 삭제합니다. )는 용량을 4로 줄입니다.
이러한 차이의 이유는 Go에서 슬라이스가 구현되는 방식에 있습니다. 슬라이스는 기본적으로 기본 배열에 대한 뷰입니다. 마지막 두 값을 삭제하면 슬라이스가 가리키는 요소 수인 슬라이스 길이가 조정되지만 기본 배열의 크기인 용량에는 영향을 미치지 않습니다.
그러나 처음 두 값을 삭제하면 값을 사용하면 축소된 슬라이스를 보유하기 위해 새로운 기본 배열이 생성됩니다. 이는 원래 기본 배열의 요소가 간격을 채우기 위해 두 위치 아래로 이동하고 이동된 요소를 수용하기 위해 새 배열이 필요하기 때문입니다.
위 내용은 Go 슬라이스에서 요소를 삭제하면 용량에 어떤 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!