ホームページ >バックエンド開発 >Golang >Go スライスをスライスすると容量が減ることがあるが、常に減らないのはなぜですか?

Go スライスをスライスすると容量が減ることがあるが、常に減らないのはなぜですか?

DDD
DDDオリジナル
2024-12-04 07:50:12315ブラウズ

Why Does Slicing a Go Slice Reduce Capacity Sometimes, But Not Always?

スライス後のスライス容量の減少について

Go では、スライスは基になる配列の連続セクションを表す柔軟なデータ構造です。スライスをスライスすると、元のスライスのデータのサブセットを参照する新しいスライスが作成されます。

s = s[:4] ではあるのに、s = s[2:] では容量が減少するのはなぜですか] と s = s[:0] は異なりますか?

行 s = s[:4] はスライスの長さを元のスライスの最初の 4 つの要素が含まれます。基礎となる配列には拡張スライスを収容するのに十分な容量がまだあるため、これによって容量は変更されません。

一方、s = s[:0] は長さ 0 のスライスを作成します。基になる配列には元の要素を保持する容量がまだあるため、容量は変わりません。

ただし、 s = s[2:] はスライスの最初の 2 つの要素を削除します。これにより、インデックス 2 から始まる元のスライスのサブセットを参照する新しいスライスが作成されます。新しいスライスは最初の 2 つの要素にアクセスできなくなるため、容量が減少します。

最初の要素を復元できますか? s = s[2:]?

いいえ、s = でスライスした最初の 2 つの要素を復元することはできません。 s[2:]。スライスすると、基になる配列への新しいポインターを持つ新しいスライスが作成されます。要素を先頭から削除すると、ポインタは新しい開始インデックスに移動され、古い要素にはアクセスできなくなります。

以上がGo スライスをスライスすると容量が減ることがあるが、常に減らないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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