将数组赋值给多维数组的行时出错

6

我正在写Haxe并目标定位在Neko上。今天我遇到了这个问题:

var a:Array<Array<Int>> = new Array<Array<Int>>();
a[1] = [1, 2, 3];

第二行代码会抛出“无效的数组访问”异常。同时,使用这种方式遍历行是不可能的:
for (i in a[0]) ...

以前的代码一直都能正常运行,但今天的代码却不能。可能是什么问题呢?如果是关于索引的话,我要访问的单元格和行是保证存在的。

1个回答

8
这个问题不是特定于Neko: = new Array<Array<Int>>() 只初始化了外部数组 - 它等同于写= []。由于它是一个空数组,任何访问都会越界并返回null
对于您的特定示例,= [[], []]将修复错误(初始化具有两个内部数组的数组)。如果您事先知道所需的内部数组数量,则数组推导是一种方便的初始化方式:
var a:Array<Array<Int>> = [for (i in 0...numInnerArrays) []];

很棒的答案。我之前不知道“在数组声明中使用for”的技巧!另外,考虑使用array.insert()作为将值分配给数组位置的替代方法,以帮助在位置不那么重要时可视化编码。我想知道,在像这种情况下,声明整个数组内容是否是一个好习惯?特别是在二维数组中。 - oli_chose123
1
这是一个非常广泛的问题.. "好的实践" 是指什么?代码风格?性能?等等... 当然,对于非常大的数组来说,可能会出现问题,但对于“简单情况”,我认为没有任何问题。 - Gama11

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接