【Go】多维 slice / array

虽然之前有看过 slice / array 比较的文章,
但在写 leetcode 时还是碰到点小麻烦,
不知道该怎麽初始化多维 slice。

多维 array

var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
i.e. var mat[2][3][4][5] int
有几个 [] 就几维,不需要自己弄 nested array。

初始化

a = [3][4]int{  
   {0, 1, 2, 3} ,   /*  initializers for row indexed by 0 */
   {4, 5, 6, 7} ,   /*  initializers for row indexed by 1 */
   {8, 9, 10, 11}   /*  initializers for row indexed by 2 */
}

多维 slice

虽然多维 slice 宣告也是依据 [] 有几个,
但动态分配空间的 slice 在需要指定 index 来填值时,
需要先初始化才不会 out of bound。

566. Reshape the Matrix 时发现 return type 是 [][]int
如果用 input 给的 r 和 c 来初始化一个 var res [r][c]int
就会是一个 array 而不是 slice,因此喷错。

初始化

目前我看到初始化多维 slice 最好的方法是用 make(),会自动填上 int 的初始值 0,如下:

// 先做一个 r 大小的 2d slice
// 此时虽然已经宣告这个 slice 中每个元素也是一个 slice,但还没有 make 去保留空间,因此若要存取类似 reshapedMat[0][0] 会喷错
reshapedMat := make([][]int,r)   
// reshapedMat 中每个元素都是大小为 c 的 slice
for i, _ := range mat {
    reshapedMat[i] = make([]int, c)
}

总结

  • 有几维就有几个 []
  • slice 要用 make 初始化,才能用 mat[0][0] 这种方法去存取并改值,不然就要用 append()
  • slice 跟 array 不是同个东西

Python 虽然也要初始化才不会 out of bound,但 return 时不需要顾虑什麽...
被宠坏ㄌㄋ


<<:  〖按图施工保证完工〗Linux CentOS 7 建置 Laradock

>>:  JS 38 - 实作 Tab 页签

[CSS] Flex/Grid Layout Modules, part 15

烫伤了手停了几天,不过差不多 15 天好像就交代完所有的东西了。剩下的大部分是比较冷门,甚至是 Gr...

【Day30】函式常见的陷阱题

今天来讲解 this 相关的陷阱题 第一题 myName = '全域'; var person = ...

[13th-铁人赛]Day 10:Modern CSS 超详细新手攻略 - background

一个单调的网页,配上精美的背景图片将带来意想不到的惊艳,但在加入背景图片可不是这麽简单,今天来介绍关...

梳理useEffect和useLayoutEffect的原理与区别

点击进入React源码调试仓库。 React在构建用户界面整体遵循函数式的编程理念,即固定的输入有固...

这些日子我学到的JavaScript:Day26- BOM

BOM,是 JavaScript 与浏览器沟通的桥梁,JavaScript 可以透过 BOM 对浏览...