ホームページ >バックエンド開発 >Golang >Go スライス: 容量と長さの違いは何ですか?

Go スライス: 容量と長さの違いは何ですか?

DDD
DDDオリジナル
2024-12-17 14:26:10933ブラウズ

Go Slices: What's the Difference Between Capacity and Length?

Go スライス: 容量と長さをわかりやすくする

Go では、スライスはデータのコレクションを操作するための強力なデータ構造です。スライスに関連する 2 つの重要な概念は、容量と長さですが、最初は理解するのが混乱する可能性があります。

次の例を考えてみましょう:

func main() {
  a := make([]int, 5)
  // [0,0,0,0,0] len=5 cap=5

  b := make([]int, 0, 5)
  // [] len=0 cap=5

  c := b[:2]
  // [0,0] len=2 cap=5

  d := c[2:5]
  // [0,0,0] len=3 cap=3
}

容量と長さ

この例では、 a の長さは 5 (含まれる要素の数)、容量は 5 (要素の数) です。再割り当て前に保持できる要素の数)。 b の長さは 0、容量は 5 で、最初は要素が含まれていませんが、最大 5 つの要素を保持できるように拡張される可能性があることを示します。

Zeroed Elements

b のように make([]int, 0, 5) でスライスを作成すると、バッキング配列が作成され、その要素の値 0 で初期化されます。これは、b には最初は要素がなくても、そのバッキング配列には 5 つのゼロ化された値が含まれていることを意味します。

スライスをスライスすると、同じバッキング配列を共有する新しいスライスが作成されます。したがって、 c := b[:2] を割り当てると、バッキング配列の最初の 2 つのゼロ要素を参照する新しいスライスが作成されます。したがって、 c の長さは 2 で、値 [0,0] が含まれます。

スライスされたスライスの容量

スライスをスライスするときの、スライスの容量結果のスライスは、スライス式の最後のインデックスと最初のインデックスの差によって決まります。 d := c[2:5] の場合、この差は 3 (5 - 2) です。したがって、 d の容量は 3 です。

結論

Go でスライスを効果的に操作するには、容量と長さを理解することが重要です。スライスは常にバッキング アレイを参照し、容量はこのバッキング アレイのサイズを表すことに注意してください。スライスをスライスすると、同じバッキング配列を共有し、その容量などのプロパティを継承する新しいスライスが作成されます。

以上がGo スライス: 容量と長さの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。