Go のスライスの容量と長さを理解する
Go では、スライスは値のシーケンスを操作するために不可欠なデータ構造です。このチュートリアルではスライスの概要を説明していますが、初心者にはその容量と長さについて疑問が残ることがあります。
ケーススタディ: スライスの調査
次のコード スニペットを考えてみましょう。 :
func main() { a := make([]int, 5) b := make([]int, 0, 5) c := b[:2] d := c[2:5] }
質問 1: c が長さとともに [0,0] として表示されるのはなぜですか2?
c は b のスライスで、最初はゼロ化された値が含まれます。 b を [:2] でスライスすると、b と同じバッキング配列を共有する新しいスライス c が作成されます。これは、c の最初の 2 つの要素が b の最初の 2 つの要素と同一であることを意味し、どちらもゼロ化されています。
質問 2: d の容量はなぜ 3 ですか?
スライスをスライスすると、そのバッキング配列も共有されます。 c を [2:5] でスライスすると、c のバッキング配列を共有する新しいスライス d が作成されます。 c には 2 つの要素があるため、そのバッキング配列には 3 つを超える要素を含めることはできません。したがって、d の容量は、バッキング配列の残りのスペース (5-2 = 3) に制限されます。
スライスの詳細な説明
Inスライスには、長さ、容量、ポインタという 3 つの重要なプロパティがあります。長さはスライス内の要素の数を表し、容量はバッキング配列が保持できる要素の最大数を示します。ポインタは、バッキング配列の最初の要素を指します。
make を使用してスライスを作成するときは、長さと容量を指定します。容量が長さよりも大きい場合、新しいバッキング アレイを再割り当てせずにスライスが拡張される可能性があります。別のスライスをスライスすると、結果のスライスは元のスライスと同じバッキング配列とポインタを共有し、それがその容量と長さに影響します。
結論
相互作用の理解スライスの長さ、容量、ポインタの間の設定は、Go でスライスをマスターするために重要です。スライス スライスを活用し、容量を操作することで、コードのパフォーマンスとメモリ使用量を最適化できます。
以上がGo スライス: スライスの長さと容量は何によって決まりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。