Go 言語の組み込み関数 copy() は、配列スライスを別の配列スライスにコピーすることができ、追加された 2 つの配列スライスのサイズが同じでない場合は、小さい方の配列スライスの要素数に応じてコピーされます。
copy() 関数の使用形式は次のとおりです。
copy( destSlice, srcSlice []T) int
このうち、srcSlice はデータ ソース スライスで、destSlice はコピーのターゲット (つまり、srcSlice を destSlice にコピー) です。ターゲット スライスには、コピーされた要素の数と、ソースとターゲットの数を保持するのに十分なスペースが割り当てられている必要があります。 copy() 関数の戻り値は、コピーされた要素の実際の数を示します。
次のコードは、copy() 関数を使用して 1 つのスライスを別のスライスにコピーするプロセスを示しています。
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 つのスライスを共有可能 基盤となる配列が同じで、重複していても問題ありません。
[例] スライスの参照およびコピー操作後のスライス要素への影響をコードで示します。
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)
//データを新しいスライススペースにコピーします
コピー(copyData、srcData)
//元のデータの最初の要素を変更します
srcData [0] =999
//参照スライスの最初の要素を出力する
fmt.Println(refData [0])
//最初と最後の要素をコピーしたスライスを印刷します
fmt.Println(copyData [0]、copyData [elementCount-1])
//元のデータを4から6まで(含まれない)コピーします
コピー(copyData、srcData [4:6])
for i:= 0; i <5; i ++ {
fmt.Printf("% d "、copyData [i])
}
}
コードの説明は次のとおりです。
- 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 要素を出力します。
「 Go言語 copy(): スライスコピー(スライスコピー)」についてわかりやすく解説!絶対に観るべきベスト2動画
Go言語とは?|プログラミング言語のGo言語について3分でわかりやすく解説します【プログラミング初心者向け】
【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】