スライスのスライス: 容量の変化を理解する
Go でスライスを操作する場合、容量の概念を理解することが重要です。容量とは、基礎となる配列を再割り当てせずにスライスが保持できる要素の最大数を指します。スライスは基になるデータをコピーしませんが、容量に影響を与える可能性があります。
s = s[2:] によって容量が減少するのはなぜですか?
スライスの場合は、元の基になる配列の一部を指す新しいスライス ヘッダーを作成します。新しいスライスの容量は、参照する配列のセグメントによって決まります。
指定されたコードでは、s = s[:4] により、配列の最初の 4 つの要素を参照するスライスが作成されます。スライスは依然として同じ基になる配列を指しているため、容量は 6 のままです。
ただし、 s = s[:0] では、長さ 0 のスライスの容量は 6 になります。これは、スライスが同じであるためです。は配列の先頭を指しているため、拡張のための十分なスペースがあります。
s = s[2:] を実行すると、スライスの最初の 2 つの要素が削除されます。これにより、新しいスライスへのポインタが変更され、基になる配列のさらに下を指すようになります。その結果、スライス後の配列には使用可能な要素が 4 つだけ残っているため、容量は 4 に減ります。
カットオフ要素の回復
要素が削除されたら、スライスから削除した場合、基になる配列を変更しているため、同じ変数を使用して復元することはできません。これらの要素を保持する必要がある場合は、元のスライスを参照する新しいスライスを作成できます。
スライスのメモリ表現
スライスの容量をよりよく理解するには、その方法を視覚化します。スライスはメモリ内で表されます:
以上がGo スライスをスライスすると容量が減るのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。