无法弄清楚如何在三维列表中打印第二维

时间:2015-06-17 15:59:04

标签: c# list for-loop dimensions

我正在制作三维清单。如果我运行我的代码,它会显示以下字符串:list5 + list3 + list1。现在这是三维的,所以每个维度都添加一个单词。如果您查看代码,将显示:4 * 4 * 4 = 64个可能性。现在我想在第二个维度添加一些东西:testing1和testing2:

SecondDimonsion.Add("testing1"); SecondDimonsion.Add("testing2");

我不希望测试结果与List5进行交互。我确实希望他们与List1 tho进行互动。 结果将是:

Hello1testing1 Hello2testing1 Hello3testing1 Hello4testing1 Hello1testing2 Hello2testing2 Hello3testing2 Hello4testing2

所以总共可以打印64 + 8种可能性。

这是一个难以解释的问题,甚至可能更难理解。如果有人了解这个概念,我很乐意编辑我的问题。

提前致谢!

List<string> List1 = new List<string>();
List<string> SecondDimonsion = new List<string>();
List<string> List5 = new List<string>();
List<string> List3 = new List<string>();
List<List<List<string>>> List6 = new List<List<List<string>>>();    

List1.Add("Hello1");                  
List1.Add("Hello2");             
List1.Add("Hello3");            
List1.Add("Hello4");       

List3.Add("123");                  
List3.Add("456");             
List3.Add("789");            
List3.Add("000"); 

List5.Add("white");
List5.Add("green");             
List5.Add("yellow");            
List5.Add("black"); 

SecondDimonsion.Add("testing1");
SecondDimonsion.Add("testing2");

for (int i = 0; i < List1.Count; i++)
{
    List<List<string>> List2 = new List<List<string>>();
    for (int j = 0; j < List3.Count -2;j++)
    {
        List<string> List4 = new List<string>();
        for (int k = 0; k < List5.Count; k++)
        {
            List4.Add(List1[i] + List3[j] + List5[k]);
        }
        List2.Add(List4);
    }
    List2.Add(SecondDimonsion);
    List6.Add(List2);
}
for (int k = 0; k < List1.Count; k++)
{
    for (int i = 0; i < List3.Count -2; i++)
    {
        for (int j = 0; j < List5.Count; j++)
        {
            Console.WriteLine(List6[k][i][j]);
        }
        Console.WriteLine(List6[k][i]);
    }
}

1 个答案:

答案 0 :(得分:2)

看起来您正在构建2个列表。第一个是3d,另一个是2d。我会把它分开:

    List<string> stuff1 = new List<string>();
    List<string> stuff2 = new List<string>();
    List<string> stuff3 = new List<string>();

    List<string> otherStuff = new List<string>();

    stuff1.Add("a1");
    stuff1.Add("a2");
    stuff1.Add("a3");
    stuff1.Add("a4");

    stuff2.Add("b1");
    stuff2.Add("b2");
    stuff2.Add("b3");
    stuff2.Add("b4");

    stuff3.Add("c1");
    stuff3.Add("c2");
    stuff3.Add("c3");
    stuff3.Add("c4");

    otherStuff.Add("d1");
    otherStuff.Add("d2");

    List<List<List<string>>> first64 = new List<List<List<string>>>();
    List<List<string>> other8 = new List<List<string>>();

    foreach (var v1 in stuff1) {
        // Fill temporary 2d list.
        List<List<string>> list2d = new List<List<string>>();           
        foreach (var v2 in stuff2) {
            // Fill temporary 1d list.
            List<string> list1d = new List<string>();
            foreach(var v3 in stuff3) {
                list1d.Add(v1 + v2 + v3);
            }

            // Add each 1d list to the temp 2d list.
            list2d.Add(list1d);
        }

        // Add each 2d list to the main 3d list.
        first64.Add(list2d);

        // Create another 1d list to hold second combinations.
        List<string> otherList1d = new List<string>();
        foreach(var otherV in otherStuff) {
            otherList1d.Add(v1 + otherV);
        }

        // Add second 1d list to second 2d list.
        other8.Add(otherList1d);
    }

    // Print first 64.
    for(var x = 0; x < first64.Count; x++) {
        for(var y = 0; y < first64[x].Count; y++) {
            for(var z = 0; z < first64[x][y].Count; z++) {
                Console.WriteLine(first64[x][y][z]);
            }
        }
    }

    // Print other 8.
    for(var x = 0; x < first64.Count; x++) {
        for(var y2 = 0; y2 < other8[x].Count; y2++) {
            Console.WriteLine(other8[x][y2]);
        }
    }

如果您将上一个循环更改为:

    for(var x = 0; x < List6.Count; x++) {
        for(var y = 0; y < List6[x].Count; y++) {
            for(var z = 0; z < List6[x][y].Count; z++) {
                Console.WriteLine(List6[x][y][z]);
            }
        }
    }

您将看到您编写的内容确实会将SecondDimension的值添加到列表中。因为List6[x].Count > List3.Count循环永远不会到达那里。但是你仍然没有向他们添加任何东西,所以你不会得到你想要的结果。

Here is a fiddle你可以玩。