初始化包含空元素的多维列表的好方法
本文关键字:列表 方法 包含空 元素 初始化 | 更新日期: 2023-09-27 18:07:25
对于我的贴图游戏,我选择使用4D嵌套列表系统。
- 第一个维度-图层(背景和前景,但可能有其他)
- 第二和第三维——二维网格,经典的基于贴图的游戏
- 第四维—网格中瓷砖包含的对象(例如,多个物品可以掉落在rouge - like的同一地板瓷砖上)
我有一个确切的图层数量和地图的高度和宽度。用这些数字初始化前三个维度,然后用空对象列表填充每个"平铺"(即第四个维度)的好方法是什么?
下面是一些代码来更好地说明它:
List<List<List<List<GameObject>>>> Grid;
public readonly int Layers, Height, Width;
可以使用linq:
List<List<List<List<GameObject>>>> Grid;
Grid = Enumerable.Range(0, Layers).Select(l =>
Enumerable.Range(0, Height).Select(h =>
Enumerable.Range(0, Width).Select(w =>
new List<GameObject>()).ToList()).ToList()).ToList();
相同的代码可用于生成数组的数组(或根据您的需要更灵活地组合),即:
List<GameObject>[][][] Grid;
Grid = Enumerable.Range(0, Layers).Select(l =>
Enumerable.Range(0, Height).Select(h =>
Enumerable.Range(0, Width).Select(w =>
new List<GameObject>()).ToArray()).ToArray()).ToArray();
如果其中三个维度的长度是固定的,则可以使用数组来代替:
List<GameObject>[,,] Grid = new List<GameObject>[Layers, Width, Height];
for(var l = 0; l < Layers; l++)
for(var x = 0; x < Width; x++)
for(var y = 0; y < Height; y++)
{
Grid[l, x, y] = new List<GameObject>();
}
如果你真的需要列表(在我看来更糟糕):
List<List<List<List<GameObject>>>> Grid = new List<List<List<List<GameObject>>>>();
for(var l = 0; l < Layers; l++)
{
Grid.Add(new List<List<List<GameObject>>>());
for(var x = 0; x < Width; x++)
{
Grid[l].Add(new List<List<GameObject>>());
for(var y = 0; y < Height; y++)
{
Grid[l][x].Add(new List<GameObject>());
}
}
}