スライスの長さと容量の処理
スライスを操作する場合、長さと容量の両方に対するスライス操作の影響を理解することが重要です。スライスの。 s[2:] でスライスすると容量が減少するのに、s[:4] または s[:0] を使用すると容量が影響を受けないのはなぜかという疑問が生じます。
この違いの鍵はどこにありますかスライスパラメータであるコロンと数値 (2) が配置されます。 s[2:] のように数字がコロンの前に置かれると、操作によりスライスの最初の 2 つの要素が事実上削除されます。これにより、スライスの長さが短縮されるだけでなく、その最初の要素へのポインタも変更されます。スライスの容量は基になる配列のサイズによって決まるため、ポインタを変更すると容量にも影響します。
対照的に、s[:4] のように数字がコロンの後に置かれる場合は、または s[:0] の場合、スライス操作はポインタを変更せずに、既存の配列内のスライスの長さを調整します。これは、スライスの容量が変更されないことを意味します。
もう 1 つの注意点は、スライスされたスライスを同じ変数に再代入するときに、s[2:] を使用して削除された最初の 2 つの要素を回復することはできないことです。 。これは、スライス操作では基になるデータが複製されず、元の配列を参照する新しいスライスが作成されるためです。スライスされたスライスを変更すると、元のスライスが変更されるため、追加の操作を行わないと失われた要素を取得できなくなります。
この概念を視覚化するには、メモリ内のスライスの次の表現を考慮してください。
[]byte{a, b, c, d, e}
s = s[2:4] を実行すると、スライスは次のように削減されます。
[]byte{c, d}
元のスライスの容量が減少します。ポインタは配列の別の部分を参照するようになりました。
以上がGo でのスライスのスライスがコロンの配置に応じて容量に異なる影響を与えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。