创建三维数组

Zol*_*ete 3 c# syntax multidimensional-array

我是C#的新手,我想创建一个像这样的多维数组:

http://kids.parks.ca.gov/pages/22784/images/maze.gif

但是在8x8x4细胞中.

我想存放迷宫细胞.

{
    {1,1,1,0}, {1,0,0,0}, {1,1,1,1}, {1,0,0,0}, {1,1,0,1}, {1,1,0,1}, {0,1,0,0}, {1,0,0,1},
    ...
    {0,1,1,0}, {1,0,1,0}, {0,0,1,1}, {1,0,1,0}, {1,0,0,1}, {0,1,0,1}, {1,1,1,0}, {1,1,0,1},
}
Run Code Online (Sandbox Code Playgroud)
int[,,] table = new int[8,8,4]; // is this right?

table[0,0] = {0, 0, 1, 1}; // I want to fill it this way.
Run Code Online (Sandbox Code Playgroud)

Pie*_*ult 5

我知道它没有明确回答这个问题,但在我看来,你是通过使用3D阵列来拍摄自己的.C#是一种OO语言,所以如果你认为OO真的有帮助.

而不是使用表示单元格的多维数组3d Maze(如果它真的是一个你想要的3d迷宫),为什么不创建一个List名为Cell的类,每个类都包含它们的位置和你需要的其他东西,如:

public class Cell
{ 
    public Cell (int x, int y, int z)
    {
        X = x;
        Y = y;
        Z = z;
    }

    public int X { get; set; }
    public int Y { get; set; }
    public int Z { get; set; }
    public bool IsExplored { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以有一个List<Cell>你可以迭代的简单.您还可以删除x,y,z并创建一个Position类.

对于墙,您可以创建Enum并使用按位操作,或存储列表Enum.既然你是初学者,我会建议你的枚举列表.您必须在代码中添加此Enum,并将此属性添加到Cell类中:

public Enum WallPosition
{
    Top,
    Left,
    Bottom,
    Right
}


public List<WallPosition> walls { get; set;} //This goes into the Cell class
Run Code Online (Sandbox Code Playgroud)

这样,每个操作都会容易得多.例如,如果您需要探索#3列中的每个单元格,则可以执行此操作

foreach (Cell cell in yourCellList.Where(c => c.Y == 3))
{
    cell.IsExplored = true;
}
Run Code Online (Sandbox Code Playgroud)

需要以不同方式渲染每个探索的细胞吗?

foreach (Cell cell in yourCellList.Where(c => c.IsExplored) { //Do stuff }
Run Code Online (Sandbox Code Playgroud)

等等.

不需要for具有3维的复杂循环,而foreach在我看来,简单的东西比a更具可读性

for (int i = 0; i < 8; i++)
    for (int j = 0; j < 8; j++)
        for (int k = 0; k < 4; k++)
Run Code Online (Sandbox Code Playgroud)

每次你需要访问你的表.

唯一丑陋的部分是填写你的列表(通过创建新的Cell实例),但它仍然比一个巨大的墙壁更可读{ { { 0, 1, 0, 1 }, {1, 1, 1, 0} [...]

我还建议您阅读OO原则介绍.

  • 此外,您的设计非常慢,访问特定单元格是O(n),如果使用多维数组,则与O(1)进行比较.如果你想能够轻松地使用`foreach`,你可以为它创建辅助方法,而不会牺牲性能. (2认同)