在 Go 中创建 2D 切片的简洁方法是什么?

在 Go 中创建 2D 切片的简洁方法是什么?,第1张

在 Go 中创建 2D 切片的简洁方法是什么?

没有更简洁的方式,你做的是“正确”的方式;因为切片总是一维的,但可以组合起来构造更高维的对象。

您可以简化的一件事是使用

for range
构造:

a := make([][]uint8, dy)for i := range a {    a[i] = make([]uint8, dx)}

另请注意,如果您使用复合文字初始化切片,则可以“免费”获得它,例如:

a := [][]uint8{    {0, 1, 2, 3},    {4, 5, 6, 7},}fmt.Println(a) // Output is [[0 1 2 3] [4 5 6 7]]

是的,这有其局限性,因为您似乎必须枚举所有元素;但是有一些技巧,即您不必枚举所有值,只需枚举不是切片元素类型的零值的值。

例如,如果您想要一个前 10 个元素为零的切片,然后跟随

1
and
2
,则可以像这样创建它:

b := []uint{10: 1, 2}fmt.Println(b) // Prints [0 0 0 0 0 0 0 0 0 0 1 2]

另请注意,如果您使用数组而不是slices,则可以非常轻松地创建它:

c := [5][5]uint8{}fmt.Println(c)

输出是:

[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]

对于数组,您不必遍历“外部”数组并初始化“内部”数组,因为数组不是描述符而是值。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5675164.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存