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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 09:00:30597ブラウズ

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

アイテムをドロップした後のスライスの容量

Go でスライスを操作する場合、スライスのタイプに基づいて容量がどのように変化するかを理解することが重要です。変更が行われました。これを説明するために、コード スニペットとその出力を調べてみましょう:

package main

import "fmt"

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)
}

func printSlice(s []int) {
    fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}

出力:

len=6 cap=6 [2 3 5 7 11 13]
len=4 cap=6 [2 3 5 7]
len=2 cap=4 [5 7]

アイテムをドロップした後に容量が異なるのはなぜですか?

スライスから最後の 2 つの項目 (s = s[:len(s)-2]) を削除すると、最初の 2 つの項目 (s = s[2:]) が削除される一方で、容量は 6 のままであることに注意してください。

この違いの理由は、Go でのスライスの実装方法にあります。スライスは基本的に、基礎となる配列へのビューです。最後の 2 つの値を削除すると、スライスの長さ (スライスが指す要素の数) が調整されますが、基になる配列のサイズである容量には影響しません。

ただし、最初の 2 つの値を削除すると、値を指定すると、縮小されたスライスを保持するために新しい基礎となる配列が作成されます。これは、元の基になる配列の要素がギャップを埋めるために 2 つ下にシフトされ、シフトされた要素を収容するために新しい配列が必要になるためです。

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

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