我正在尝试创建一个多维数组,以包含[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)
{
//
}
例如,我想要一个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}
等...
我已经在网上搜索了一个C#解决方案(我是OO的相对新手,不熟悉C,C ++等),但到目前为止已经空白了。
我在采用数组创建的方法中走在正确的轨道上吗? 任何人都可以提供一些关于如何用坐标填充数组的技巧,如果可能的话使用循环吗?
答案 0 :(得分:5)
您可以创建一个类来保存坐标(以及与每个图块相关的其他内容),而不是使用多维数组。
例如,它可能如下所示:
public class Tile
{
public int X {get; set;}
public int Y {get; set;}
public bool HasMine {get; set;}
//Etc.
}
因此,您可以使用简单的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 });
要迭代它们,您只需使用foreach
语句或某些LINQ
即可。这将是解决问题的更多OO方式。
答案 1 :(得分:1)
假设width
和height
是您的宽度和高度的整数:
int[,] grid = new int[width,height];
将创建一个用零填充的宽度x高度数组(因为这是整数的默认值)。
数组的坐标是数组的索引,因此您无需为此填充它。您需要做的就是存储您想要存储的任何数据:
grid[2,1] = 5; // the cell at {2,1} now contains the number 5