ホームページ >バックエンド開発 >Golang >Go言語でcopy()を使う方法

Go言語でcopy()を使う方法

青灯夜游
青灯夜游オリジナル
2023-01-10 11:48:513129ブラウズ

Go 言語では、copy() を使用してスライスをコピーします。1 つの配列スライスを別の配列スライスにコピーできます。追加された 2 つの配列スライスのサイズが同じでない場合は、小さい方が使用されます。配列スライス内の要素の数がコピーされます。構文は「copy(データ元スライス, コピー先スライス)」です。 copy() 関数を使用してスライスをコピーする場合、ソース スライスの長さが宛先スライスの長さよりも長い場合、コピーは不完全になります。

Go言語でcopy()を使う方法

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

Go 言語の組み込み関数 copy() は、1 つの配列スライスを別の配列スライスにコピーできます。追加された 2 つの配列スライスのサイズが同じでない場合は、小さい方の配列スライスの要素が使用されます。コピー。

Go 言語の copy(): スライス コピー (スライス コピー)

Go 言語のスライス コピーは、組み込みの copy() 関数を使用します。 copy() 関数を使用してスライスをコピーする場合、ソース スライスの長さが宛先スライスの長さよりも長い場合、コピーは不完全になります。

copy() 関数の使用形式は次のとおりです。

copy( destSlice, srcSlice []T) int
  • srcSlice はデータ ソース スライス

  • destSlice はコピー先です (つまり、srcSlice を destSlice にコピーします)

    ターゲット スライスにはスペースが割り当てられており、コピーされた要素の数を保持するのに十分な大きさである必要があり、ソースとターゲットの型は一貫している必要があります

戻り値:

  • # は、実際にコピーされた要素の数を示します。

説明

  • スライス src をスライス dst にコピーし、コピーに成功した要素の数を返します。スライス src の長さが dst スライスの長さより大きい場合、dst スライスの長さの要素のみがコピーされます。

次のコードは、copy() 関数を使用して、あるスライスを別のスライスにコピーするプロセスを示しています。

slice1 := []int{1, 2, 3, 4, 5}
slice2 := []int{5, 4, 3}
copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中
copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置

ループを介してスライス要素をコピーする方が簡単ですが、組み込みの copy() 関数の方が使いやすいです。copy() 関数の最初のパラメータはコピーされるターゲット スライスで、2 番目のパラメータはソース スライスです。2 つのスライスは同じ基礎となる配列を共有できます。重複があっても質問がございます。

ケース

1. コードを使用して、スライス要素のスライス要素に対する参照およびコピー操作の影響を示します。

package main
import "fmt"
func main() {
    // 设置元素数量为1000
    const elementCount = 1000
    // 预分配足够多的元素切片
    srcData := make([]int, elementCount)
    // 将切片赋值
    for i := 0; i < elementCount; i++ {
        srcData[i] = i
    }
    // 引用切片数据
    refData := srcData
    // 预分配足够多的元素切片
    copyData := make([]int, elementCount)
    // 将数据复制到新的切片空间中
    copy(copyData, srcData)
    // 修改原始数据的第一个元素
    srcData[0] = 999
    // 打印引用切片的第一个元素
    fmt.Println(refData[0])
    // 打印复制切片的第一个和最后一个元素
    fmt.Println(copyData[0], copyData[elementCount-1])
    // 复制原始数据从4到6(不包含)
    copy(copyData, srcData[4:6])
    for i := 0; i < 5; i++ {
        fmt.Printf("%d ", copyData[i])
    }
}

Go言語でcopy()を使う方法

コードの説明は次のとおりです。

  • 8 行目では、要素の合計数を 1000 と定義しています。

  • 行 11、1000 要素の整数スライスを事前に割り当てます。このスライスは元のデータとして使用されます。

  • 14 行目から 16 行目では、srcData に 0 から 999 までの整数値を入力します。

  • 行 19、refData は srcData を参照しており、等号演算によりスライスは要素をコピーしません。

  • 行 22、srcData と同じサイズ (等しいサイズ) および型のスライス copyData を事前に割り当てます。

  • 24 行目では、copy() 関数を使用して、元のデータを copyData スライス スペースにコピーします。

  • 27 行目、元のデータの最初の要素を 999 に変更します。

  • 30 行目で、参照データの最初の要素が変更されます。

  • 33行目はコピーしたデータの最初のデータを出力していますが、コピーしたデータなので変更はありません。

  • 36行目、srcDataのローカルデータをcopyDataにコピーします。

  • 行 38 ~ 40 では、ローカル データをコピーした後、copyData 要素を出力します。

#2. ソース スライスの長さが宛先スライスの長さよりも長い場合、コピーは不完全です

package main
import (
	"fmt"
)
func main() {
	//当源切片的长度大于目的切片长度时,复制不完整
	var sliceSrc = []string{"PHPCN", "Python", "Golang"}
	var sliceDst = []string{"Hello", "HaiCoder"}
	copy(sliceDst, sliceSrc)
	fmt.Println("sliceDst =", sliceDst)
}

Go言語でcopy()を使う方法

[関連する推奨事項:Go ビデオ チュートリアル プログラミング教育 ]

以上がGo言語でcopy()を使う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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