Go语言复制数组的函数

新手上路,请多包涵

Go 中是否有用于将一个数组复制到另一个数组的内置函数?这适用于二维(或更多)维数组吗?

原文由 angry_gopher 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 533
2 个回答

Go语言中是否有用于将一个数组复制到另一个数组的内置函数?

是的: http ://play.golang.org/p/_lYNw9SXN5

 a := []string{
    "hello",
    "world",
}
b := []string{
    "goodbye",
    "world",
}

copy(a, b)

// a == []string{"goodbye", "world"}


这适用于二维(或更多)维数组吗?

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

我不认为有一个内置的多维数组的深度复制:你可以像这样手动完成: 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

编辑:正如评论中所指出的,我假设“复制数组”是指“对切片进行深度复制”,因为可以根据 jnml 的回答使用 = 运算符对数组进行深度复制(因为数组是值类型): http ://play.golang.org/p/8EuFqXnqPB

原文由 alecbz 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 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)
}

操场


输出:

 [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]]

原文由 zzzz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题