[英]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.