当前位置: 首页 > 知识库问答 >
问题:

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

楚俊迈
2023-06-18

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

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

这样,c 就是一个新的数组,它包含了 ab 中的所有元素。注意,在调用 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 就是一个新的数组,它包含了 abc 中的所有元素。

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

共有1个答案

葛宏爽
2023-06-18

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

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
 类似资料:
  • 这段代码用来规范json字符串,有没有优雅的写法?

  • 本文向大家介绍手写代码:合并两个有序数组相关面试题,主要包含被问及手写代码:合并两个有序数组时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 解法一: int num[m+n];//新建一个数组,对nums1和nums2排序,排完序赋值给nums1 解法二:   解法三:直接在nums1里进行操作,从nums1的尾部开始,取nums1和nums2中的最大值放入其中。如果n先到达0就能直接得到

  • 本文向大家介绍golang的httpserver优雅重启方法详解,包括了golang的httpserver优雅重启方法详解的使用技巧和注意事项,需要的朋友参考一下 前言 去年在做golangserver的时候,内部比较头疼的就是在线服务发布的时候,大量用户的请求在发布时候会被重连,在那时候也想了n多的方法,最后还是落在一个github上的项目,facebook的一个golang项目grace,那时

  • 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,

  • 本文向大家介绍手写代码:合并有序数组相关面试题,主要包含被问及手写代码:合并有序数组时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 解法一:从结尾开始归并,不会覆盖元素。从A[n+m-1]处开始往前一个元素一个元素的求,每次都要比较A[i]和B[j]的大小。需要注意的是,要考虑到: A和B有一个为空时的情况 解法二:由于合并后A数组的大小必定是m+n,所以从最后面开始往前赋值,先比较A和B

  • 问题内容: 我需要将2个多维数组合并在一起以创建一个新数组。 这两个数组是从和创建的,我需要将它们彼此关联。 数组#1 阵列#2 新阵列 我正在使用的当前代码有效,但仅适用于数组中的最后一项。 我想通过循环该函数在每个循环中擦除新数组。 我该如何纠正? 问题答案: []会将其附加到数组而不是覆盖。