【问题标题】:How to initialize an array of 2D-arrays?如何初始化二维数组?
【发布时间】:2011-12-08 04:40:44
【问题描述】:

我有一个二维数组。例如,它是这样的:

{{{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}}};

编译器会抱怨“;预期”。

如果我写

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}}};

编译器会抱怨

“需要一个嵌套数组初始值设定项”。

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

【问题讨论】:

    标签: c# multidimensional-array initialization array-initialization


    【解决方案1】:

    2d 数组的数组就是 3d 数组:

    int[, ,] array3D = new int[,,] { { { 1, 2, 3 } }, { { 4, 5, 6 } } };
    

    还可以在 MSDN 上查看更多信息 http://msdn.microsoft.com/en-us/library/2yd9wwz4(v=VS.90).aspx

    【讨论】:

    • 但这使得最外层的索引是固定的,这从他想要不固定的问题中可以清楚地看出
    • 3d 数组还要求提供所有 3 个索引,从而产生一个整数,而请求者希望索引并返回一个 2d 数组。
    【解决方案2】:

    您正在尝试创建锯齿状数组。你的数组有n 行,所以你的第一个正方形应该是[] 而不是[,]。每行中的元素(n 的索引)是二维数组,因此您需要使用[,]。最后,您可以通过将 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[,][],但错误仍然存​​在。
    • 啊,我看到了你的问题,我已经从你的例子中添加了更正代码。
    • 它有效~ 我认为int[,] 是一种类型,所以这种类型的数组将是int[,][]。为什么会这样?
    • 添加更多解释,希望对您有所帮助。 :)
    猜你喜欢
    • 2012-11-29
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多