登录
首页 >  Golang >  Go问答

Go 中如何连接两个数组

来源:stackoverflow

时间:2024-04-22 10:36:36 406浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《Go 中如何连接两个数组》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

这是一个我正在努力寻找答案的基本问题,因为有很多关于如何使用附加函数和展开运算符连接两个切片的答案,这些答案错误地使用了单词“数组'。

我是 go 新手,并且假设在大小已知的情况下使用大小数组是一种很好的做法。然而,我正在努力使用数组,因为我不知道如何进行简单的操作,例如串联。这是一些代码。

var seven [7]int

five := [5]int{1,2,3,4,5}
two := [2]int{6,7}

//this doesn't work as both the inputs and assignment are the wrong type
seven = append(five,two)

//this doesn't work as the assignment is still the wrong type
seven = append(five[:],two[:])

//this works but I'm not using arrays anymore so may as well use slices everywhere and forget sizing
seven2 := append(five[:],two[:])

据我所知,我可以放弃数组并专门使用切片,或者我可以编写一个循环来显式构造新数组。还有第三种选择吗?


解决方案


append() 只能用于将元素附加到切片。如果您有一个数组,则无法将其直接传递给 append()

您可以做的是 slice 数组,这样您就得到一个切片(它将使用该数组作为其后备存储),并且您可以使用该切片作为元素的目标和源。

例如:

s := seven[:0]
s = append(s, five[:]...)
s = append(s, two[:]...)
fmt.println(seven)

这将打印(在 Go Playground 上尝试):

[1 2 3 4 5 6 7]

另请注意,由于 append() 返回结果切片,因此可以将所有这些写在一行中:

_ = append(append(seven[:0], five[:]...), two[:]...)

(这里不需要存储结果,因为我们已经并且只想使用后备数组,但通常情况并非如此。)

这会输出相同的结果,请在 Go Playground 上尝试一下。虽然这不是很可读,所以不值得将其压缩为一行。

尽管当您拥有目标数组时,“附加”数组只不过是将它们复制到目标、正确的位置。为此,您也可以使用内置的 copy() 函数。请注意,copy() 函数也只接受切片,因此您也必须在此处对数组进行切片。

copy(seven[:], five[:])
copy(seven[len(five):], two[:])
fmt.println(seven)

这将输出相同的结果。在 Go Playground 上试试这个。

您可以使用 copy

copy(seven[:], five[:])
copy(seven[5:], two[:])
fmt.Printf("%v\n", seven)
> [1 2 3 4 5 6 7]

到这里,我们也就讲完了《Go 中如何连接两个数组》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>