【问题标题】:2D Array vs Jagged array?二维阵列与锯齿阵列?
【发布时间】:2015-01-30 00:03:54
【问题描述】:

所以,我搜索了一下,但不完全确定要搜索什么,tbh... 我目前正在做一些“级别生成”代码,并创建对象来包含我这一代的对象。 基本上我有一个由坐标定义的“单元格”类。 然后我试图创建一个“CellArea”类,它在一个区域中保存多个单元格。如果这是一个矩形就足够简单了,因为那时我只使用 Cell[, ] 。但由于这可能是某种“L”形(我可以将其限制为 2 个“走廊”),我将如何去做呢?还是做某种列表/收集更有效?

我想知道你是否可以做一个看起来像...的锯齿状数组

{0, 1, 2}
{0, 1, 2}
{0, 1, 2}
{0, 1, 2}
{0, 1, 2, 3, 4, 5}
{0, 1, 2, 3, 4, 5}
{0, 1, 2, 3, 4, 5}

我希望我把我的问题说清楚了吗?显然,我可以做一个 [7, 6] 的 bidim 数组,然后不填充“空”位置,但在某种程度上不是效率低下吗?

【问题讨论】:

    标签: arrays unity3d multidimensional-array area jagged-arrays


    【解决方案1】:

    当然可以!

    int[][] jaggedArray = new int[7][];
    
    jaggedArray[0] = new int[] {0, 1, 2};
    jaggedArray[1] = new int[] {0, 1, 2};
    jaggedArray[2] = new int[] {0, 1, 2};
    jaggedArray[3] = new int[] {0, 1, 2};
    jaggedArray[4] = new int[] {0, 1, 2, 3, 4, 5};
    jaggedArray[5] = new int[] {0, 1, 2, 3, 4, 5};
    jaggedArray[6] = new int[] {0, 1, 2, 3, 4, 5};
    

    参考:http://msdn.microsoft.com/en-us/library/2s05feca.aspx

    【讨论】:

    • 非常感谢 :) 我现在正在考虑这一点 :D 虽然我想我实际上会从一个 bidim 数组开始,然后看看我们对“奇数”区域的需求有多大是。我将只使用 2 个“CellArea”来定义一个有弯道的走廊 :) 感谢您的帮助!
    • 请记住,连续数组比数组数组更有效。此外,如果您的地图形状像小写字母“h”,则锯齿状数组将无济于事。如果您需要快速连续多次访问此数据,则引用不同数组(缓存抖动)导致的减速将比将地图保存在一个大数组中的内存使用量更糟糕。
    猜你喜欢
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多