C#:构建3D数组并用数据填充它

时间:2015-07-28 18:50:59

标签: c# arrays list multidimensional-array

我到目前为止尝试的代码:

private static List<List<List<int>>> threeDArrayToThreeDList(int [,,] letters) {
    // 3d-array to 3d-list
    List<List<List<int>>> letterslist = new List<List<List<int>>>();
    List<List<int>> sublist = new List<List<int>> ();
    List<int> subsublist = new List<int> ();

    for (int i = 0; i < 2; i++) {
        letterslist.Add (sublist);
        for (int j = 0; j < 2; j++) {
            letterslist[i].Add (subsublist);
            for (int k = 0; k < 2; k++) {
                Console.WriteLine (letterslist [i][j][k]); // Element not found         
                Console.WriteLine (letters [i,j,k]);
                letterslist [i] [j] [k] = letters [i,j,k];
            }
        }
    }
    return letterslist;
}

为什么找不到letterslist [i] [j] [k]?

2 个答案:

答案 0 :(得分:5)

你的代码错了。您需要为每个&#34;索引&#34;创建一个列表。您的代码只会创建3个列表。

以下是它的运作方式:

private static List<List<List<int>>> threeDArrayToThreeDList(int [,,] letters) {
    // 3d-array to 3d-list
    List<List<List<int>>> letterslist = new List<List<List<int>>>();

    for (int i = 0; i < 2; i++) {
        letterslist.Add (new List<List<int>> ());
        for (int j = 0; j < 2; j++) {
            letterslist[i].Add (new List<int> ());
            for (int k = 0; k < 2; k++) {
                Console.WriteLine (letters [i,j,k]);
                letterslist [i] [j].Add(letters [i,j,k]);
            }
        }
    }
    return letterslist;
}

答案 1 :(得分:0)

这是因为letterslist [i] [j]列表中没有元素。 添加一个元素,它将引导您完成导致异常的行。

更改最内层循环中的代码,如下所示:

for (int k = 0; k < 2; k++) {
    letterslist[i][j].Add (letters[i, j, k]);
    Console.WriteLine(letterslist[i][j][k]); // Should work fine
    Console.WriteLine(letters[i, j, k]);
}