LoginSignup
1
0

More than 1 year has passed since last update.

Go言語のcopyについて

Posted at

Go言語のcopy関数は、配列、スライスの要素をコピーするために使用されます。以下に、copy関数を使用したサンプルコードを記載。

golang sample
func main() {
    // 元となるスライスを作成する
    src := []int{1, 2, 3}

    // コピー先のスライスを作成する
    dst := make([]int, len(src))

    // srcの要素をdstにコピーする
    copy(dst, src)

    // srcとdstを出力する
    fmt.Println(src) // => [1 2 3]
    fmt.Println(dst) // => [1 2 3]
}

この例では、copy関数を使用して、srcスライスの要素をdstスライスにコピーしています。copy関数は、第1引数にコピー先のスライス、第2引数にコピー元のスライスを指定します。また、dstスライスを作成する際に、len関数を使用してsrcスライスの長さと同じ長さのスライスを作成しています。

copy関数のTiptsとしては、コピー先のスライスは、コピー元のスライスと同じ型である必要があります。また、copy関数でコピー先のスライスを指定した場合、コピー元のスライスの要素数がコピー先のスライスの要素数よりも多い場合、コピー先のスライスには最初の要素からコピー先のスライスの要素数分だけ要素がコピーされます。逆に、コピー元のスライスの要素数がコピー先のスライスの要素数よりも少ない場合、コピー先のスライスにはコピー元のスライスの要素が最初の要素から順番にコピーされます。

copy関数は、スライスや配列の要素をコピーする場合に便利な関数です。スライスの要素を別のスライスにコピーする場合、copy関数を使用することで、スライスの要素を簡単にコピーすることができます。

スライスの一部をコピーする場合

元のスライスの一部の要素を新しいスライスにコピーする場合、copy関数を使用することができます。例えば、元のスライスから一部の要素を抽出して、新しいスライスを作成する場合に使用します。

golang sample
a := []int{1, 2, 3, 4, 5}
b := make([]int, 3)
copy(b, a[1:4])

上記の例では、元のスライスaから、インデックス1から4の範囲の要素をコピーして、新しいスライスbを作成しています。

スライスの内容を変更する場合

スライスの要素を変更する場合、copy関数を使用することができます。元のスライスを変更せずに、新しいスライスを作成し、新しいスライスの要素を変更することができます。例えば、スライスの要素を逆順に並び替える場合に使用します。

golang sample
a := []int{1, 2, 3, 4, 5}
b := make([]int, len(a))
copy(b, a)
for i := 0; i < len(b)/2; i++ {
    j := len(b) - i - 1
    b[i], b[j] = b[j], b[i]
}

上記の例では、元のスライスaから新しいスライスbを作成し、新しいスライスbの要素を逆順に並び替えています。

copy関数は、元のスライスを変更せずに、新しいスライスを作成することができるため、スライスの要素を変更する場合に有用です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0