Ale*_*lec 27
Go语言中是否有用于将一个数组复制到另一个数组的内置函数?
是的:http://play.golang.org/p/_lYNw9SXN5
a := []string{
"hello",
"world",
}
b := []string{
"goodbye",
"world",
}
copy(a, b)
// a == []string{"goodbye", "world"}
Run Code Online (Sandbox Code Playgroud)
这是否适用于两个(或更多)维数组?
copy将做一个浅的行副本: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
Run Code Online (Sandbox Code Playgroud)
我认为没有内置的多维数组深度复制:你可以手动完成: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
Run Code Online (Sandbox Code Playgroud)
编辑:正如评论中所指出的,我假设"复制一个数组"你的意思是"做一个切片的深层复制",因为数组可以=根据jnml的答案与运算符进行深度复制(因为数组是值类型) :http://play.golang.org/p/8EuFqXnqPB
zzz*_*zzz 16
在Go中复制数组的主要"函数"是赋值运算符=,因为任何其他类型的任何其他值都是如此.
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)
}
Run Code Online (Sandbox Code Playgroud)
输出:
[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]]
Run Code Online (Sandbox Code Playgroud)
使用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)
Run Code Online (Sandbox Code Playgroud)
OUT:
A: [1 2 3]
B: [0 0 0]
A: [1 2 3]
B2: [1 2 3]
A: [1 2 3]
B3: [1 9 3]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38661 次 |
| 最近记录: |