如何初始化一个二维数组的数组?

13
我有一个由二维数组组成的数组。例如,它看起来像这样:

{{{0, 0, 1}, {1, 0, 0}}
{{0, 0, 3}, {2, 1, 2}, {2, 2, 1}, {3, 0, 0}}
{{0, 0, 7}, {3, 2, 6}, {6, 2, 3}, {6, 3, 2}, {7, 0, 0}}}

但是如果我写

int [,][] arrays={{{0, 0, 1}, {1, 0, 0}}
                  {{0, 0, 3}, {2, 1, 2}, {2, 2, 1}, {3, 0, 0}}
                  {{0, 0, 7}, {3, 2, 6}, {6, 2, 3}, {6, 3, 2}, {7, 0, 0}}};
编译器会报错"; expected"。 如果我写
int [,][] arrays={new int[,] {{0, 0, 1}, {1, 0, 0}}
                  new int[,] {{0, 0, 3}, {2, 1, 2}, {2, 2, 1}, {3, 0, 0}}
                  new int[,] {{0, 0, 7}, {3, 2, 6}, {6, 2, 3}, {6, 3, 2}, {7, 0, 0}}};

编译器会报错:

“需要嵌套数组初始化”。

那么为什么会出现这种情况,正确的初始化方式是什么?

2个回答

24

你试图创建一个不规则的数组。你的数组有n行,所以你的第一个方括号应该是[]而不是[,]。每一行(即n的索引)中的元素是2D数组,因此你需要使用[,]。最后,你可以通过将int [,][]更改为int[][,]来解决问题。

int[][,] arrays = {
    new int[,] {{0, 0, 1}, {1, 0, 0}},
    new int[,] {{0, 0, 3}, {2, 1, 2}, {2, 2, 1}, {3, 0, 0}},
    new int[,] {{0, 0, 7}, {3, 2, 6}, {6, 2, 3}, {6, 3, 2}, {7, 0, 0}}
};

我在开头添加了 new int[,][] 但错误仍然存在。 - Ziyuan
啊,我明白你的问题了,我已经从你的示例中添加了修正代码。 - Ekk
1
可以了!我原以为 int[,] 是一种类型,所以这种类型的数组应该是 int[,][]。为什么会这样呢? - Ziyuan
增加更多的解释,希望这有所帮助。 :) - Ekk

3

1
但这会使得外层索引固定,从他的问题中可以清楚地看出他不想要固定的。 - Daniel
一个3D数组还需要提供所有3个索引,从而得到一个整数,而提问者希望索引并返回一个2D数组。 - dapi

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