簡體   English   中英

C#數組多維或鋸齒狀

[英]c# array multidimensional or jagged

我正在為2D游戲地圖繪制3x3的正方形網格。

我想創建一個具有行和列位置的數組,並且對於每個行和列位置,它都有4個0或1,表示是否將在正方形的該邊上繪制牆。

我想創建這個數組:

        int [,][,,,] Boxes = {{0,0}, {1,0,0,1},
          {1,0}, {1,0,1,0},
          {0,1}, {0,0,0,1}, 
          {1,1}, {1,1,1,0}, 
          {2,0}, {1,1,0,0},
          {2,1}, {0,0,0,1}, 
          {3,1}, {1,0,1,0}, 
          {0,2}, {0,0,1,1}, 
          {1,2}, {1,0,1,0}, 
          {2,2}, {0,1,1,0}};

但是,這似乎是不正確的。

我也嘗試過這個:

        int [][] Boxes = new int [2][4] 
        Boxes = {{0,0}, {1,0,0,1},
          {1,0}, {1,0,1,0},
          {0,1}, {0,0,0,1}, 
          {1,1}, {1,1,1,0}, 
          {2,0}, {1,1,0,0},
          {2,1}, {0,0,0,1}, 
          {3,1}, {1,0,1,0}, 
          {0,2}, {0,0,1,1}, 
          {1,2}, {1,0,1,0}, 
          {2,2}, {0,1,1,0}};

很清楚,我要制作的數組類型嗎?

我該怎么辦?

謝謝

第一種方法的問題是int [,] [,,,]是包含四個維度數組的一個二維數組。 [,]表示格式為{{0,0},{0,0}}的數組,而不是格式為{0,0}的數組。 逗號表示維數 ,而不是元素數

您的第二種方法更加接近。 您正在創建具有正確尺寸的數組,但是無法像這樣在數組內聯中初始化數組。 它看起來像這樣:

int [][] Boxes = new int[][] {
      new int[] {1,0}, new int[] {1,0,1,0},
      new int[] {0,1}, new int[] {0,0,0,1}, 
      new int[] {1,1}, new int[] {1,1,1,0}, 
      new int[] {2,0}, new int[] {1,1,0,0},
      new int[] {2,1}, new int[] {0,0,0,1}, 
      new int[] {3,1}, new int[] {1,0,1,0}, 
      new int[] {0,2}, new int[] {0,0,1,1}, 
      new int[] {1,2}, new int[] {1,0,1,0}, 
      new int[] {2,2}, new int[] {0,1,1,0}};

坦率地說,這是可怕的。

這里突出的一件事是您編寫了new int [2][4] [2] [4]沒有引用大小為2的數組,后跟大小為4的數組。它引用的是大小為4的數組中大小為2的數組,這是重要的區別。 研究尺寸和長度之間的差異,因為這似乎是使代碼正常工作的主要問題。

正如其他人提到的那樣,這種設計沒有充分利用您擁有的工具。 如果使用對象封裝此數據,而不是將多種類型的數據放在同一數組中,則代碼可能會很清楚。 這變得令人困惑並且非常容易出錯。

您可以這樣做:

int[,][] boxes = new int[3,3][];
boxes[0,1] = new [] { 0, 0, 0, 1};
boxes[1,0] = new [] { 1, 0, 1, 0};
// .. etc.

但是,正如評論中提到的那樣,您可能需要重新考慮您的設計。 創建一些類將使事情變得更清楚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM