Existe-t-il une fonction intégrée dans Go pour copier un tableau dans un autre? Est-ce que cela fonctionnera dans le cas de tableaux bidimensionnels (ou plus)?
Existe-t-il une fonction intégrée en langage Go pour copier un tableau dans un autre?
Oui: http://play.golang.org/p/_lYNw9SXN5
a := []string{
"hello",
"world",
}
b := []string{
"goodbye",
"world",
}
copy(a, b)
// a == []string{"goodbye", "world"}
Est-ce que cela fonctionnera dans le cas de tableaux bidimensionnels (ou plus)?
copy
fera une copie superficielle des lignes: http://play.golang.org/p/0gPk6P1VWh
a := make([][]string, 10)
b := make([][]string, 10)
for i := range b {
b[i] = make([]string, 10)
for j := range b[i] {
b[i][j] = strconv.Itoa(i + j)
}
}
copy(a, b)
// a and b look the same
b[1] = []string{"some", "new", "data"}
// b's second row is different; a still looks the same
b[0][0] = "Apple"
// now a looks different
Je ne pense pas qu'il y ait une fonction intégrée pour faire des copies en profondeur de tableaux multidimensionnels: vous pouvez le faire manuellement comme: http://play.golang.org/p/nlVJq-ehzC
a := make([][]string, 10)
b := make([][]string, 10)
for i := range b {
b[i] = make([]string, 10)
for j := range b[i] {
b[i][j] = strconv.Itoa(i + j)
}
}
// manual deep copy
for i := range b {
a[i] = make([]string, len(b[i]))
copy(a[i], b[i])
}
b[0][0] = "Apple"
// a still looks the same
edit: Comme indiqué dans les commentaires, j'ai supposé par "copier un tableau" que vous vouliez dire "faire une copie complète d'une tranche", car les tableaux peuvent être copiés en profondeur avec le =
opérateur selon la réponse de jnml (car les tableaux sont des types de valeur): http://play.golang.org/p/8EuFqXnqPB
La "fonction" principale pour copier un tableau dans Go est opérateur d'affectation = , comme c'est le cas pour toute autre valeur de tout autre type.
package main
import "fmt"
func main() {
var a, b [4]int
a[2] = 42
b = a
fmt.Println(a, b)
// 2D array
var c, d [3][5]int
c[1][2] = 314
d = c
fmt.Println(c)
fmt.Println(d)
}
Production:
[0 0 42 0] [0 0 42 0]
[[0 0 0 0 0] [0 0 314 0 0] [0 0 0 0 0]]
[[0 0 0 0 0] [0 0 314 0 0] [0 0 0 0 0]]
Utilisez copy
http://play.golang.org/p/t7P6IliMOK
a := []int{1, 2, 3}
var b [3]int
fmt.Println("A:", a)
fmt.Println("B:", b)
copy(b[:], a)
fmt.Println("A:", a)
fmt.Println("B2:", b)
b[1] = 9
fmt.Println("A:", a)
fmt.Println("B3:", b)
EN DEHORS:
A: [1 2 3]
B: [0 0 0]
A: [1 2 3]
B2: [1 2 3]
A: [1 2 3]
B3: [1 9 3]