Go スライス: 容量と長さについて
Go でスライスを操作する場合、容量と長さの概念を理解することが重要です。これらのプロパティはスライス操作で重要な役割を果たし、スライスまたは追加時のスライスの動作に影響を与えます。
次のコード例を考えてみましょう。
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 }
このコードでは、長さと長さに関してさまざまな疑問が生じます。スライス c と d の容量:
c の長さはなぜ2 and contains [0,0]?
b は最初は空 ([]、length=0) でしたが、Go の配列とスライスは常にゼロ値で初期化されることに注意することが重要です。整数の場合、ゼロ値は 0 です。したがって、[:2] で b をスライスすると、b のゼロ化された値を継承する新しいスライスが作成されます。
なぜ d の容量は 3 なのでしょうか?
Go でスライスをスライスすると、同じ基になる配列が再利用されます。この場合、d は c と同じバッキング配列を共有します。 d の容量は、end-start として計算されます。start と end は、それぞれスライス式 ([2:5]) の開始インデックスと終了インデックスです。したがって、d の容量は 5 (終了) - 2 (開始) = 3 となります。
以上がGo スライス: スライス c と d にそれぞれの長さと容量があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。