ホームページ  >  記事  >  バックエンド開発  >  Go の `copy()` 関数は重複するスライスでどのように機能しますか?

Go の `copy()` 関数は重複するスライスでどのように機能しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-01 02:19:28571ブラウズ

How Does Go's `copy()` Function Work With Overlapping Slices?

コピー関数の説明: 総合ガイド

Go のコピー関数は、ソース スライスから宛先スライスに要素を複製するために使用されます。宛先スライスとソース スライスの 2 つのパラメータを受け取ります。どちらも同じ要素タイプを持つ必要があります。

copy() の仕組み

copy() はコピーします。ソース スライスから宛先スライスまでの要素ですが、2 つのスライスの最小長までに限られます。ソース スライスが宛先スライスより短い場合は、ソース スライス内の要素のみがコピーされます。逆に、宛先スライスがソース スライスより短い場合は、最初の len(dst) 要素のみがコピーされます。

copy() の重要な点は、重複するスライスを処理できることです。つまり、元のスライスから、同じ基礎となる配列を共有する宛先スライスに要素をコピーできます。これは、要素の移動やスライスの再配置などの操作に役立ちます。

使用例

以下は、copy() の使用方法の例です。

  • のコピーを作成していますスライス:

    <code class="go">src := []int{10, 11, 12, 13, 14}
    dst := make([]int, len(src))
    n := copy(dst, src)
    fmt.Println("n =", n, "src =", src, "dst =", dst)</code>

    出力:

    n = 5 src = [10 11 12 13 14] dst = [10 11 12 13 14]
  • スライスの一部のコピー:

    <code class="go">src := []int{10, 11, 12, 13, 14}
    dst := make([]int, 2)
    n := copy(dst, src[1:])
    fmt.Println("n =", n, "src =", src, "dst =", dst)</code>

    出力:

    n = 2 src = [10 11 12 13 14] dst = [11 12]
  • 重複スライス:

    <code class="go">src := []int{10, 11, 12, 13, 14}
    dst := src[1:]
    n := copy(dst, src)
    fmt.Println("n =", n, "src =", src, "dst =", dst)</code>

    出力:

    n = 4 src = [10 11 12 13 14] dst = [11 12 13 14]

特殊なケース: 文字列からバイト スライスへのコピー

copy() は、文字列からバイトのスライスにバイトをコピーするためにも使用できます。これは、文字列をバイト配列に変換したり、バイト データを操作したりする場合に便利です。

例:

<code class="go">str := "Hello, World!"
data := make([]byte, 5)
n := copy(data, str)
fmt.Println("n =", n, "str =", str, "data =", data)</code>

出力:

n = 5 str = Hello, World! data = [72 101 108 108 111]

結論

Go のコピー機能は、スライスを操作するための多用途ツールです。これは、スライスを複製したり、スライスの一部をコピーしたり、重複するスライスを処理したりするための簡潔かつ効率的な方法を提供します。 Go で効果的にスライスを操作するには、copy() がどのように機能するかを理解することが不可欠です。

以上がGo の `copy()` 関数は重複するスライスでどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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