#独家
golang 合并多个数组有优雅的写法吗?

2023-06-18 0 3,553

在 Go 语言中,可以使用 append 函数来合并多个数组。例如,如果你有两个整数数组 a 和 b,可以这样合并它们:

a := []int{1, 2, 3}
b := []int{4, 5, 6}
c := append(a, b...)

这样,c 就是一个新的数组,它包含了 a 和 b 中的所有元素。注意,在调用 append 函数时,第二个参数后面要加上 ...,表示将第二个数组中的元素展开。

如果你有多个数组需要合并,可以重复调用 append 函数。例如:

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

这样,d 就是一个新的数组,它包含了 ab 和 c 中的所有元素。

new bing 给的写法,好丑陋, 如果多次 append嵌套 这个代码变得难看,不然就会多一些无用的临时变量

专门写个方法,下面给出两个方式:

package main

import "fmt"

// For-loop 通过append一个空数组里面添加元素
func Merge(arrays ...[]int) []int {
    c := []int{}
    for _, a := range arrays {
        c = append(c, a...)
    }
    return c
}

// 预分配一个长度为所有数组大小的切片,然后通过copy的方式往里面拷贝替换
func ConcatCopyPreAllocate(slices [][]int) []int {
    var totalLen int
    for _, s := range slices {
        totalLen += len(s)
    }
    tmp := make([]int, totalLen)
    var i int
    for _, s := range slices {
        i += copy(tmp[i:], s)
    }
    return tmp
}

func main() {
    a := []int{1, 2, 3}
    b := []int{4, 5, 6}
    c := []int{7, 8, 9}
    d := Merge(a, b, c)

    fmt.Println(d)

    dd := ConcatCopyPreAllocate([][]int{a, b, c})

    fmt.Println(dd)
}

方式二的性能效果要好一些,仅供参考:

goos: darwin
goarch: amd64
cpu: Intel(R) Core(TM) i5-8279U CPU @ 2.40GHz
BenchmarkMerge-8                        10485656               107.7 ns/op           168 B/op          3 allocs/op
BenchmarkConcatCopyPreAllocate-8        21462087                51.60 ns/op           96 B/op          1 allocs/op
PASS
ok      command-line-arguments  2.737s
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 golang 合并多个数组有优雅的写法吗? https://www.jkxiazai.com/1839.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务