- 主题:go 动态创建二维数组的方式不是很优雅
我觉得go在基本数据类型上面努力向中级语言靠拢,除了chan类型。go的int字长竟然是跟Arch走的,这种很像是c语言那种写着c代码脑里想汇编的搞法。
定长数组就是内存的连续区间,slice是带两个变量(长度和容量)的内存连续区间,取slice一部分的时候除非修改内容否则不复制内存。这样用起来能比较精确地知道数据占了多少内存。
【 在 littleSram 的大作中提到: 】
: 是,
: 我明白你的意思,明明一个语法糖能提升体验,为啥不做呢。就像我也奇怪为啥不提供一个set的数据结构,明明比语法糖还简单吧,但是go语言自带的就是没有。
: 让人用map[string]bool来代替set
: ...................
--
FROM 202.67.113.*
是,这三个大佬太有个性了
slice这个数据结构为了效率,在使用的时候会有一些陷阱。因为我们习惯动态数组了,但是slice不是动态数组。所以会掉坑里。
【 在 jdk140 的大作中提到: 】
: 我觉得go在基本数据类型上面努力向中级语言靠拢,除了chan类型。go的int字长竟然是跟Arch走的,这种很像是c语言那种写着c代码脑里想汇编的搞法。
: 定长数组就是内存的连续区间,slice是带两个变量(长度和容量)的内存连续区间,取slice一部分的时候除非修改内容否则不复制内存。这样用起来能比较精确地知道数据占了多少内存。
--
FROM 61.148.245.*
arr := [m][n]int{}肯定不行,因为[m][n]int在大部分语言里就不是合法的类型。
你看java里类型也是int[][],不是int[m][n]
扩展一下make的功能是可行的。没这样搞可能只是go里面切片的切片用得不多而已。
【 在 dreamr 的大作中提到: 】
: 假如需要创建一个 m * n 的二维数组(切片)。
: 1、java 创建二维数组
: int[][] arr = new int[m][n];
: ...................
--
修改:ilovecpp FROM 101.82.122.*
FROM 101.82.122.*
本来就没有[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.*
我的意思是,
arr := [m][n]int{}
这种语法,在go里面左边变量就是右边类型,和java不同。你在go里用这个语法不合适。
扩展make的功能是可以的。
【 在 dreamr 的大作中提到: 】
: 本来就没有[m][n]int 类型,arr 的类型应该是[][]int,参加java 的声明即可。
--
FROM 58.37.61.*
我知道你意思,如果go 支持用动态变量申请数组(注意不是slice),arr := [m][n]int{} 这种语法就合情合理了。
实际上java是支持这种语法的,比如new int[m][n] 返回的就是一个不可变数组。
【 在 ilovecpp 的大作中提到: 】
: 我的意思是,
: arr := [m][n]int{}
: 这种语法,在go里面左边变量就是右边类型,和java不同。你在go里用这个语法不合适。
: ...................
--
FROM 221.218.175.*
大部分语言里类型不能带变量,也就是说[m][n]int不是合法类型。这样的语言里arr := [m][n]int{} 这种语法没法合情合理,因为[m][n]int这一坨根本就不知道是个什么玩意儿。
java那种语法没必要地增加复杂性,new后面跟的并不是合法类型,而是只在new后面有效的特殊语法。
而你改一下make让它支持make([][]int, []int{m,n})则并不需要语法上弄什么特例。如果不是make([][]int, m, n)被占用了本来还可以再简单点儿。
【 在 dreamr 的大作中提到: 】
: 我知道你意思,如果go 支持用动态变量申请数组(注意不是slice),arr := [m][n]int{} 这种语法就合情合理了。
: 实际上java是支持这种语法的,比如new int[m][n] 返回的就是一个不可变数组。
--
FROM 58.37.61.*
对头。
自己写个 NewFoo 也就是分分钟的事儿吧。
【 在 ilovecpp (cpp) 的大作中提到: 】
: 大部分语言里类型不能带变量,也就是说[m][n]int不是合法类型。这样的语言里arr := [m][n]int{} 这种语法没法合情合理,因为[m][n]int这一坨根本就不知道是个什么玩意儿。
: java那种语法没必要地增加复杂性,new后面跟的并不是合法类型,而是只在new后面有效的特殊语法。
: 而你改一下make让它支持make([][]int, []int{m,n})则并不需要语法上弄什么特例。如果不是make([][]int, m, n)被占用了本来还可以再简单点儿。
--
修改:flw FROM 27.38.241.*
FROM 27.38.241.*
c、c++码农表示这样很合理, go就是给c++码农补充web短板的,java码农就别来参和了。
--
FROM 183.134.186.*
等泛型出来就都解决了
【 在 dreamr (追梦人) 的大作中提到: 】
: 用slice 也没问题,可是为什么不能提供一个优雅的初始化方式?
: 发自「今日水木 on HMA-AL00」
--
FROM 106.39.149.*