>  기사  >  백엔드 개발  >  Go 슬라이스에서 요소를 삭제하면 용량에 어떤 영향을 줍니까?

Go 슬라이스에서 요소를 삭제하면 용량에 어떤 영향을 줍니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-01 09:00:30597검색

How Does Dropping Elements from a Go Slice Affect Its Capacity?

항목 삭제 후 슬라이스의 용량

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.