スライス容量の削減について
Go スライスは、ストレージに基礎となる配列を使用する効率的なデータ構造です。これらは長さと容量の組み合わせで表され、容量はスライスが保持できる要素の最大数を定義します。
スライス容量の変更
スライスの操作容量に影響を与える場合があります:
例
次の Go プログラムについて考えてみましょう:
package main import "fmt" func main() { s := []int{2, 3, 5, 7, 11, 13} printSlice(s) s = s[:0] printSlice(s) s = s[:4] printSlice(s) 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=0 cap=6 [] len=4 cap=6 [2 3 5 7] len=2 cap=4 [5 7]
説明
最初、スライスの長さは 6、容量は 6 です。長さを 0 に変更してもポインターは変更されません。したがって容量は変わりません。長さを4つに伸ばしても容量は変わりません。ただし、2 番目の要素以降 (s = s[2:]) でスライスをスライスすると、ポインタが変更され、長さ 2、容量 4 の新しいスライスが作成されます。
データ復元
s = s[2:] は、スライスから最初の 2 つの要素を削除します。それらを回復する必要がある場合は、s = s[2:] 操作を実行する前に、それらを含む新しいスライスを作成する必要があります。
スライスのメモリ表現
スライスのメモリ表現を理解することは、s = の容量がなぜなのかを理解するために重要です。 s[2:] は減少します:
以上がスライスは Go のスライス容量にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。