アイテムをドロップした後のスライスの容量
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]
アイテムをドロップした後に容量が異なるのはなぜですか?
スライスから最後の 2 つの項目 (s = s[:len(s)-2]) を削除すると、最初の 2 つの項目 (s = s[2:]) が削除される一方で、容量は 6 のままであることに注意してください。
この違いの理由は、Go でのスライスの実装方法にあります。スライスは基本的に、基礎となる配列へのビューです。最後の 2 つの値を削除すると、スライスの長さ (スライスが指す要素の数) が調整されますが、基になる配列のサイズである容量には影響しません。
ただし、最初の 2 つの値を削除すると、値を指定すると、縮小されたスライスを保持するために新しい基礎となる配列が作成されます。これは、元の基になる配列の要素がギャップを埋めるために 2 つ下にシフトされ、シフトされた要素を収容するために新しい配列が必要になるためです。
以上がGo スライスから要素を削除すると、その容量にどのような影響がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。