栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在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
2
,则可以这样创建切片:

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

还要注意,如果使用数组而不是slice,则可以很容易地创建它:

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]]

如果是数组,则不必遍历“外部”数组并初始化“内部”数组,因为数组不是描述符而是值。请参阅博客文章数组,切片(和字符串):有关更多详细信息的“追加”机制。

在Go Playground上尝试示例。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/368042.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号