在 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
就是一个新的数组,它包含了 a
、b
和 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
这段代码用来规范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,
问题内容: 我需要将2个多维数组合并在一起以创建一个新数组。 这两个数组是从和创建的,我需要将它们彼此关联。 数组#1 阵列#2 新阵列 我正在使用的当前代码有效,但仅适用于数组中的最后一项。 我想通过循环该函数在每个循环中擦除新数组。 我该如何纠正? 问题答案: []会将其附加到数组而不是覆盖。
本文向大家介绍手写代码:合并有序数组相关面试题,主要包含被问及手写代码:合并有序数组时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 解法一:从结尾开始归并,不会覆盖元素。从A[n+m-1]处开始往前一个元素一个元素的求,每次都要比较A[i]和B[j]的大小。需要注意的是,要考虑到: A和B有一个为空时的情况 解法二:由于合并后A数组的大小必定是m+n,所以从最后面开始往前赋值,先比较A和B