Go の「copy」関数は重複するスライスに対してどのように機能しますか?

Mary-Kate Olsen
リリース: 2024-10-31 03:44:31
オリジナル
460 人が閲覧しました

How does the Go `copy` function work with overlapping slices?

コピー関数の詳細を理解する

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!