创建并填充表示扫雷类型网格的多维数组

The*_*ear 0 c# multidimensional-array

我正在尝试创建一个多维数组,以包含[X,Y]宽度和高度的多维数组中的笛卡尔坐标(x,y)数组.

这是我到目前为止所处的地方; 我变得绝望地迷茫......

int[][][] grid = new int[width][][];
    for (int x = 0; x < width; x++)
    {
        grid[x] = new int[height][];
        for (int y = 0; y < height; y++)
        {
           grid[y] = new int[2][];
        }
    }

    foreach (int[][] coordinate in grid)
    {
        //        
    }
Run Code Online (Sandbox Code Playgroud)

例如,我想要一个3 x 4网格由数组表示如下:

{1, 1}, {2, 1}, {3, 1}
{1, 2}, {2, 2}, {3, 2}
{1, 3}, {2, 3}, {3, 3}
{1, 4}, {2, 4}, {3, 4}
Run Code Online (Sandbox Code Playgroud)

等等...

我已经在网上搜索了一个C#的解决方案(我是OO的相对新手,不熟悉C,C++等)但到目前为止已经空白了.

我在采用阵列创建的方法中走在正确的轨道上吗?任何人都可以提供一些关于如何使用坐标填充数组的技巧,如果可能的话使用循环?

Pie*_*ult 5

您可以创建一个类来保存坐标(以及与每个图块相关的其他内容),而不是使用多维数组.

例如,它可能如下所示:

public class Tile
{
    public int X {get; set;}
    public int Y {get; set;}
    public bool HasMine {get; set;}
    //Etc.
}
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用简单的方法List<Tile>来保存所有切片,而不是使用多维数组.填充该列表所需要做的就是为每个tile创建一个新的Tile实例,如下所示:

List<Tile> tiles = new List<Tile>();

for(int i = 0; i < NB_HORIZONTAL_TILES; i++)
    for (int j = 0; j < NB_VERTICAL_TILES; j++)
        tiles.Add(new Tile { X = i; Y = j });
Run Code Online (Sandbox Code Playgroud)

要迭代它们,您可以简单地使用一个foreach或多个语句LINQ.这将是解决问题的更多OO方式.