2013-06-06 59 views
0

我想創建一個多維數組來包含[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×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

http://msdn.microsoft.com/en-us/library/2yd9wwz4(v=vs。 71).aspx http://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx http://msdn.microsoft.com/en-us/library/aa664573(v=vs.71).aspx http ://msdn.microsoft.com/en-us/library/aa288453(v = vs.71).aspx – Patashu

+3

爲什麼你需要用座標填充數組?當然,數組**的索引是**座標。 –

+0

謝謝大家。馬特,你完全正確;有時我比消化香蕉慢.. –

回答

3

您可以創建一個類來保存座標(以及與每個圖塊相關的其他內容),而不是使用多維數組。

例如,它可能看起來像這樣的:

public class Tile 
{ 
    public int X {get; set;} 
    public int Y {get; set;} 
    public bool HasMine {get; set;} 
    //Etc. 
} 

因此而不是一個多維數組,你可以使用一個簡單的List<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

假設widthheight與您的寬度和高度的整數:

int[,] grid = new int[width,height]; 

將創建充滿了零的寬度×高度陣列(因爲這是默認值的整數)。

數組的座標是數組中的索引,因此您無需爲此填充它。所有你需要做的是什麼數據要存儲在哪個位置過要填充店:

grid[2,1] = 5; // the cell at {2,1} now contains the number 5 
+0

你能解釋一下這樣的聲明是什麼意思int [,]網格? – Marek

+1

@Marek:Patashu給你的鏈接解釋得很好。 'int [,]'聲明一個二維矩形數組。這與'int [] []'相反,它聲明瞭一個參差不齊的數組(它可能是矩形的,但不一定是)。 –