ホームページ  >  記事  >  バックエンド開発  >  Go スライスの先頭から要素を削除すると、その容量にどのような影響がありますか?

Go スライスの先頭から要素を削除すると、その容量にどのような影響がありますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-01 12:28:02333ブラウズ

How Does Dropping Elements from the Beginning of a Go Slice Affect Its Capacity?

Go でのスライス容量の変更について

Go スライスを操作する場合、容量などの基礎的なプロパティを理解することが不可欠です。スライスから最後の n 項目を削除すると容量が維持されますが、最初の n 項目を削除すると容量に影響します。

Go スライスの構造

Go スライスは構造として実装されます。 3 つのフィールドで構成されます:

<code class="go">type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}</code>
  • array: スライスを裏付ける基礎となる配列へのポインター。
  • len: スライス内の要素の数。
  • cap : スライスの容量。保持できる要素の数を表します。

最後の n 項目の削除

最後の n 項目を a から削除する場合スライスでは、式 s[:len(s)-n] を使用して、元の配列と同じ基礎となる配列を共有する新しいスライスを作成します。ただし、新しいスライスの長さは減少しますが、容量は変わりません。これは、基になる配列に残りの要素を収容するのに十分な容量があるためです。

最初の n 個の項目の削除

一方、最初の n 個の項目を式 s[n:] を使用してスライスを作成すると、より短い長さの新しいスライスを作成するだけでなく、新しい基礎となる配列も割り当てられます。新しいスライスの容量は、減少した要素数に合わせて調整されます。

次のコードを考えてみましょう。

<code class="go">func main() {
    s := []int{2, 3, 5, 7, 11, 13}
    printSlice(s)

    // Drop its last two values
    s = s[:len(s)-2]
    printSlice(s)

    // Drop its first two values
    s = s[2:]
    printSlice(s)
}</code>

出力には、スライスを操作する際の長さ、容量、および基礎となる配列のポインタの変化が表示されます。

ptr=0x450000 len=6 cap=6 [2 3 5 7 11 13]
ptr=0x450000 len=4 cap=6 [2 3 5 7]
ptr=0x450008 len=2 cap=4 [5 7]

結論

Go スライスの内部構造を理解するには、それらを効果的に操作するために重要です。最後の n 項目の削除が容量に与える影響は、最初の n 項目の削除とは異なることを認識することで、開発者はコードを最適化し、スライスのサイズ変更に関連する潜在的なパフォーマンスの問題を回避できます。

以上がGo スライスの先頭から要素を削除すると、その容量にどのような影響がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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