Go プログラミング言語には、あるスライスから別のスライスへの要素のコピーを容易にする組み込みのコピー関数が用意されています。ドキュメントによると、コピーはソース スライスから宛先スライスに要素をコピーすることによって動作します。特に、宛先がバイトのスライスである場合、ソースは文字列にすることができます。
コピー関数の署名は次のとおりです。
<code class="go">func copy(dst, src []Type) int</code>
ここで、dst と src はそれぞれ宛先スライスとソース スライスを表します。戻り値は、コピーされた要素の数を示す整数で、両方のスライスの長さの最小値です。
コピーの仕組みを説明するために、次の例を考えてみましょう。
<code class="go">src := []int{10, 11, 12, 13, 14} dst := []int{0, 1, 2, 3, 4} 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]
この例では、ソース スライスの 5 つの要素すべてが宛先スライスにコピーされ、宛先スライスにはソース スライスと同じ要素が含まれます。 .
コピーの興味深い機能は、スライスの重複を処理できることです。オーバーラップとは、宛先スライスとソース スライスが同じ基礎となる配列を共有するシナリオを指します。このような場合でも、次の例に示すように、関数を正しくコピーします。
<code class="go">copy(src, src[1:]) fmt.Println("n =", n, "src =", src)</code>
出力:
n = 4 src = [1 2 3 4 4]
この例では、src[1:] がソースとして使用されます。 、最初の要素を除きます。ソースには 4 つの要素があるため、4 つの要素がコピーされ、要素が 1 つのインデックスだけシフトされました。
コピー関数では、文字列からバイトをコピーすることもできます。バイトのスライス。次のコードはこれを示しています。
<code class="go">str := "Hello, World!" data := make([]byte, 5) n = copy(data, str) fmt.Println("n =", n, "str =", str, "data =", data) fmt.Printf("data as string: %s\n", data)</code>
出力:
n = 5 str = Hello, World! data = [72 101 108 108 111] data as string: Hello
copy 関数は、スライス間で要素をコピーするための Go の便利なツールです。通常のスライスと重複するスライスの両方を処理し、文字列からバイトのスライスにバイトをコピーすることもできます。 Go プログラムでスライスを効果的に操作するには、関数の動作を理解することが不可欠です。
以上がGo の「copy」関数は重複するスライスに対してどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。