ホームページ > バックエンド開発 > Golang > `s = s[2:]` で Go スライスをスライスすると、`s = s[:0]` や `s = s[:4]` と比べて容量にどのような影響がありますか?

`s = s[2:]` で Go スライスをスライスすると、`s = s[:0]` や `s = s[:4]` と比べて容量にどのような影響がありますか?

DDD
リリース: 2024-12-01 17:35:11
オリジナル
868 人が閲覧しました

How Does Slicing a Go Slice with `s = s[2:]` Impact Its Capacity Differently Than `s = s[:0]` or `s = s[:4]`?

Go スライスのスライスと容量削減

Go でスライスを操作する場合、スライス操作がスライスに与える影響を理解することが不可欠です。容量。この記事では、スライス容量に対するさまざまなスライス操作のさまざまな影響に関する特定の質問に対処します。

次のコード スニペットを考えてみましょう:

package main

import "fmt"

func main() {
    s := []int{2, 3, 5, 7, 11, 13}
    printSlice(s)

    // Slice the slice to give it zero length.
    s = s[:0]
    printSlice(s)

    // Extend its length.
    s = s[:4]
    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)
}
ログイン後にコピー

このコードには、整数のスライスがあります。 s.最初に印刷した後、さまざまなスライス操作を実行し、スライスの長さと容量への影響を観察します。

's = s[2:]' 後の容量の減少

重要な疑問は、その理由です。 s = s[2:] 行は、s = s[:4] や s = s[:0] とは異なり、容量を削減します。違いは、使用される構文にあります。[2:] は、インデックス 2 からスライスの最後までのスライスを表し、最初の 2 つの要素を効果的に削除します。

メモリとスライス

スライスは、メモリ内の基礎となる配列の一部。スライスを変更するときは、配列へのポインタを変更します。

s = s[2:] の場合、スライスのポインタは最初の 2 つの要素をスキップして前に移動します。これにより、スライスが基になる配列のより小さい部分を指すようになるため、スライスの容量が実質的に削減されます。

カットオフ要素を回復できますか?

残念ながら、最初の 2 つの要素を回復することはできません。 s = s[2:] を使用して切り取られたもの。これは、スライスのポインタが前方に移動し、元のデータが参照されなくなるためです。

結論

Go スライスを操作する場合、スライス操作の動作を理解することが重要です。異なるスライス構文は容量にさまざまな影響を与える可能性があるため、予期しない結果を防ぐためにこれらの影響を認識することが重要です。

以上が`s = s[2:]` で Go スライスをスライスすると、`s = s[:0]` や `s = s[:4]` と比べて容量にどのような影響がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート