c# - 用空元素初始化多维列表的好方法?

标签 c# list multidimensional-array initialization nested-lists

对于我的图 block 游戏,我选择使用 4D 嵌套列表系统。

  • 第一维 - 图层(背景和前景,但可能还有其他)
  • 第二维和第三维 - 二维网格,基于图 block 的游戏的经典
  • 第四维 - 网格中的图 block 包含的对象(例如,在 rougelike 中,多个项目可以掉落在同一个地砖上

我有确切的图层数以及 map 的高度和宽度。用这些数字初始化前三个维度,然后用空对象列表填充每个“图 block ”(即第四个维度)的好方法是什么?

这里有一些代码可以更好地说明它:

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();

关于c# - 用空元素初始化多维列表的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15809450/

相关文章:

python - 从列表末尾删除零

c++ - 如何 std::sort 一个 3 维 vector

php - 如何从多维数组中获取所有值

c# - 如何设置附件名称以在 Outlook 中正确显示

python - 如何按排序顺序对列表中的项目进行分组?

python - 中序二叉树遍历(使用Python)

php - 何时可以在多维数组中访问定义的变量?

c# - 在 .net Web 服务中使用 log4net

c# - 内部异常不在我的代码中抛出

c# - 当路径中存在句点时找不到 ServiceStack 处理程序