我有过
arr := [][]int32 {{1,2,3} ,{4,5,6}, {7,8,9}}
我想要
newArr := []int32 {1,2,3,4,5,6,7,8,9}
在JS我可以做
arr1d = [].concat(...arr2d);
作为许多类似这样的简单方法之一
围棋里有这样的东西吗?
您无法避免for循环,但对于泛型,它可以轻松扩展到任何类型的片:
func Flatten[T any](lists [][]T) []T {
var res []T
for _, list := range lists {
res = append(res, list...)
}
return res
}
示例用法:
func main() {
w := [][]string{{"a", "b", "c"}, {"d", "e", "f"}}
v := Flatten(w)
fmt.Println(v) // [a b c d e f]
d := [][]uint64{{100, 200}, {3000, 4000}}
e := Flatten(d)
fmt.Println(e) // [100 200 3000 4000]
}
操场:https://go.dev/play/p/X81g7GYFd4n
Go有< code >个字符串。连接和< code >字节。Join,但没有连接/串联切片的一般功能。一旦泛型被引入到语言中,这种功能就有可能被添加到标准库中。
与此同时,用循环来做这件事是足够清晰和简洁的。
var newArr []int32
for _, a := range arr {
newArr = append(newArr, a...)
}
我有 我想要 在JS我可以做 像这样简单的方法之一 围棋里有这样的东西吗?
问题内容: 例如输入:(类型:) 转换示例:(类型:的切片) 问题答案: 除了mhutter的答案外,还请注意您的输入看起来像一个JSON数组(也许是来自JSON文本?)。 如果您这样处理,则可以将其内容编组为一个切片。直接解析其中的数字并不会更快(因为该包使用了反射),但是它肯定更简单: 输出(在Go Playground上尝试):
问题内容: 我很好奇拆包切片并将其作为参数发送给可变参数函数。 假设我们有一个带有可变参数的函数: 如果我们不想传入一个接口,它就可以工作,那么我们是否拆包都没关系: 如果我们有一片片的话,那会很棘手。在这里,编译器不允许我们传递解压版本: 错误提示: 在解包参数中不能将sliceOfSlices(类型[] [] interface {})用作类型[] interface {} 我不知道为什么会这
我想把一个切片的末尾写到同一个切片的顶部。 我见过如何在锈菌阵列的两个可变切片上操作 我希望获得尽可能高的性能(例如,通过使用)。
取一个list或tuple的部分元素是非常常见的操作。比如,一个list如下: >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] 取前3个元素,应该怎么做? 笨办法: >>> [L[0], L[1], L[2]] ['Michael', 'Sarah', 'Tracy'] 之所以是笨办法是因为扩展一下,取前N个元素就没辙了。 取前N个元素
举个例子 给你一个list 让你取前30个怎么办? a = [] # 很多数据 a[0],a[1] #按照这种方式吗?这也太复杂了! for i in a: pass ## 这种方式也是可以的,但是还是有点复杂了,在编程语言中,或者是我们的编程思想中,less is more是最重要的,也就是说,写的越少越好。 # 所以我们可以采用切片的方式 a[1:3],从第二个开始到第