- 主题:go 动态创建二维数组的方式不是很优雅
假如需要创建一个 m * n 的二维数组(切片)。
1、java 创建二维数组
int[][] arr = new int[m][n];
2、go 创建二维切片
arr := make([][]int, m)
for i := range arr {
arr[i] = make([]int, n)
}
实际上,很多场合并不需要二维切片,只是需要二维数组。
为什么不能支持如下这种写法?技术上应该不难吧。
arr := [m][n]int{}
--
FROM 123.119.101.*
go 的问题是不支持动态尺寸的数组。
可是为什么不支持呢?
【 在 flw 的大作中提到: 】
: 如果你只是想要创建二维数组的话,
: 可以用 arr := [4][5]int{} 是可以的。
: 不支持动态尺寸。
: ...................
--
FROM 123.119.101.*
用slice 也没问题,可是为什么不能提供一个优雅的初始化方式?
【 在 littleSram 的大作中提到: 】
:
: slice的确和动态数组不同
:
: 我理解不支持的原因和不支持set数据结构一样,让人用map实现set的功能。作者就是不愿把时间花在这上面。
:
: :
: --
发自「今日水木 on HMA-AL00」
--
FROM 223.104.42.*
本来就没有[m][n]int 类型,arr 的类型应该是[][]int,参加java 的声明即可。
【 在 ilovecpp 的大作中提到: 】
: arr := [m][n]int{}肯定不行,因为[m][n]int在大部分语言里就不是合法的类型。
: 你看java里类型也是int[][],不是int[m][n]
: 扩展一下make的功能是可行的。没这样搞可能只是go里面切片的切片用得不多而已。
--
FROM 221.218.175.*
我知道你意思,如果go 支持用动态变量申请数组(注意不是slice),arr := [m][n]int{} 这种语法就合情合理了。
实际上java是支持这种语法的,比如new int[m][n] 返回的就是一个不可变数组。
【 在 ilovecpp 的大作中提到: 】
: 我的意思是,
: arr := [m][n]int{}
: 这种语法,在go里面左边变量就是右边类型,和java不同。你在go里用这个语法不合适。
: ...................
--
FROM 221.218.175.*
据说要用方括号或者圆括号
【 在 Knightmare 的大作中提到: 】
:
: 等泛型出来就都解决了
: --
:
发自「今日水木 on HMA-AL00」
--
FROM 221.218.175.*