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

如何将2D切片拼合为1D切片?

池兴邦
2023-03-14

我有过

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);

作为许多类似这样的简单方法之一

围棋里有这样的东西吗?

共有2个答案

徐兴昌
2023-03-14

您无法避免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

杨柏
2023-03-14

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],从第二个开始到第