[英]How am I able to instantiate multiple Objects in a 2D array of 1D arrays in C#
所以我試圖有一個二維數組的數組(所以[,] [])
盡管由於某種原因,它們最終都返回Null(很可能是由於未分配給數組)
編輯1:錯誤已在代碼中修復。 謝謝。 Edit2:固定標題,因為它實際上是1D數組的2D數組。
例:
public Environment()
{
_grid2D = new Object[20, 20][];
}
我還將在稍后的代碼中嘗試為它們分配對象:
public GenerateGrid()
{
Random rand = new Random();
for (int i = 0; i < 10; i++ )
{
obj = new InsertObject(rand.Next(0,19), rand.next(0,19));
_grid2D[InsertObject.XPos, InsertObject.YPos][0] = obj;
}
}
我試圖使用這種數組,因為我似乎需要多個2D平面,這些平面彼此堆疊。 這樣,多個游戲對象從技術上講就可以存在於同一空間中,因為2D數組是一個將包含位置的數組(X和Y屬性已經在其他地方定義)
這可能有點令人費解,因為可能有更好的方法。
我需要一個20x20的網格,該網格具有多個平面。
隨機確定位置是設計選擇,當同一位置有多個對象時,我將檢查並防止/重新分配位置(再次為rand)。
我正在猜測,但是我認為您要嘗試做的是在2D數組的每個單元格中允許任意數量的“ InsertObject”對象。 我猜,根據您將每個對象添加到網格時為每個對象隨機選擇x,y坐標的訪問模式。
如果是這種情況,請在網格的每個單元格中使用一個列表。 如果需要,可以在添加第一個項目時分配每個列表,並使它保持稀疏狀態(這樣就不會為其中包含0個對象的單元格創建列表。)或者可以進行第一遍操作,在其中填充所有單元格帶有空列表的2D數組。 采取的策略取決於您對效率的重視程度,以及期望的人口稀少還是人口稠密。
List<Object>[,] _grid2D = new List<Object>[20, 20];
Random rand = new Random();
for (int i = 0; i < 10; i++)
{
int x = rand.Next(1, 20);
int y = rand.Next(1, 19);
Object obj = new object(); // Replace with your InsertObject here.
if (_grid2D[x, y] == null) // If this cell's list doesn't exist yet...
{
_grid2D[x, y] = new List<Object>(); /// ... then make one.
}
_grid2D[x, y].Add(obj); // Add the object to the list.
}
如果使用這種稀疏技術,則在訪問網格時要小心,因為如果某些網格單元格有0個對象(_grid2D [x,y]可能為null),則可能沒有創建列表。
如果你不想讓每個網格單元的多個對象,那么你只需要InsertObject對象的二維數組。 InsertObject[,] _grid2D = new InsertObject[20,20];
兩種不同的實現方式,一種是3D陣列,另一種是2D陣列列表
static void Main(string[] args)
{
int numberOfPanes = 50;
var myGrid1 = GenerateGrid1(20, 20, numberOfPanes);
var myGrid2 = GenerateGrid2(20, 20, numberOfPanes);
}
public static Object[,,] GenerateGrid1(int x, int y, int numberOfPanes)
{
var grid = new Object[x, y, numberOfPanes];
Random rand = new Random(Guid.NewGuid().GetHashCode());
for (int k = 0; k < numberOfPanes; k++)
{
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
grid[i, j, k] = rand.Next(1, 20);
}
}
}
return grid;
}
public static List<int[,]> GenerateGrid2(int x, int y, int numberOfPanes)
{
var grid = new int[x, y];
var multiPanes = new List<int[,]>();
Random rand = new Random(Guid.NewGuid().GetHashCode());
for (int k = 0; k < numberOfPanes; k++)
{
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
grid[i, j] = rand.Next(1, 20);
}
}
multiPanes.Add(grid);
}
return multiPanes;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.