gpt4 book ai didi

go - 连接3个或更多 slice 的最简洁方法

转载 作者:行者123 更新时间:2023-12-01 22:31:52 25 4
gpt4 key购买 nike

我正在寻找一种在Go中简洁高效地连接3个或更多 slice 的方法。

假设我要连接以下 slice (所有代码都可以在此处找到-https://play.golang.org/p/6682YiFF8qG):

a := []int{1, 2, 3}
b := []int{4, 5, 6}
c := []int{7, 8, 9}

我的第一次尝试是通过使用append方法:
d1 := append(a, b...)
d1 = append(d1, c...) // [1 2 3 4 5 6 7 8 9]

但是,此方法很冗长,需要2个append调用才能连接三个 slice 。因此,对于 n slice ,我将需要 n-1调用来追加,这不仅冗长,而且效率低下,因为它需要多次分配。

我的下一个尝试是创建一个可变参数函数,以仅使用一个新的 slice 分配来处理串联:
func concat(slicesOfSlices ...[]int) []int {
var totalLengthOfSlices int

for _, slice := range slicesOfSlices {
totalLengthOfSlices += len(slice)
}

arr := make([]int, 0, totalLengthOfSlices)

for _, slice := range slicesOfSlices {
arr = append(arr, slice...)
}

return arr
}

然后,我可以如下使用它:
d2 := concat(a, b, c) // [1 2 3 4 5 6 7 8 9]

为了说明这一点,我想在JavaScript中模拟散布运算符的以下便捷功能,我经常通过以下方式使用它们:
const a = [1, 2, 3];
const b = [4, 5, 6];
const c = [7, 8, 9];

const d = [...a, ...b, ...c]; // [1, 2, 3, 4, 5, 6, 7, 8, 9]

换句话说,我正在寻找一种方法来执行类似 d3 := append(a, b, c)d3 := append(a, b..., c...)的操作,但是要使用标准的Go库或使用比我少的代码。

注意可能的重复项

我不认为这是“如何串联两个 slice ”问题的重复,因为我的问题是关于以最简洁和惯用的方式串联 3个或更多薄片

最佳答案

您可以使用第一种使用append的方法,如下所示:

a := []int{1, 2, 3, 4}
b := []int{9, 8, 7, 6}
c := []int{5, 4, 3, 2}

a = append(a, append(b, c...)...)

话虽这么说,我认为您的可变参数 concat函数更干净,并且不是实用程序函数的代码。

(Go Playground Link)

祝好运!

关于go - 连接3个或更多 slice 的最简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59019335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com