在Obj-C中处理多维数组的最佳方法是什么?我已经阅读了创建NSArray的NSArray的所有内容,使用C样式数组,有些甚至建议在STL中使用c ++样式并使用c ++样式数组....
我需要一个三维的对象数组。 NSArray NSArrays的NSArray是最好的吗?这看起来很复杂。是否有任何对象可以在一个干净清晰的api中处理n维数组?
干净清晰的api示例:
obj = [MDArray getLayer: 1 atX: 10 atY: 10];
[MDArray setLayer: 1 atX: 10 atY: 10 withValue: object];
如果它有所不同,我的最终目标是游戏的地图数据。我已经习惯了C风格的东西,但我很努力地使用obj-c(随时学习)。
答案 0 :(得分:3)
建议嵌套是很自然的,但浪费时间,除非你需要能够做稀疏数组的东西。
更好的解决方案是创建一个NSMutableArray并用NSNulls或NSPointerArray填充它,它允许通过setCount:
方法获取空值。
然后,如果你需要能够处理坐标(0..3,0..3,0..3)处的对象,那就是4 * 4 * 4(或64)个插槽。 / p>
从那里,将(x,y,z)坐标转换成阵列中的一个插槽只是一个乘法问题; (1,2,3)是索引处的对象(1 +(2 *宽度)+(3 *宽*高))。
这个简单的数学运算避免了一堆额外的分配(以及额外的分配可能会破坏内存)。虽然我不是为了过早地进行优化,但数学是直截了当的,而分配舞蹈则不是 - 这首先更容易实现。
答案 1 :(得分:1)
我建议,正如Aurum在评论中所说,编写自己的多维数组包装器。
这将是相对简单的 - 包装器将拥有数组数组,但是暴露出你所描述的方法,这些方法隐藏了遍历数组的相对丑陋的代码。
答案 2 :(得分:0)
标准库中没有多维数组。我会把这个东西包在我自己的课堂里,这很简单。如果前一个解决方案证明很慢,那么实现将是嵌套的NSArray
或纯C阵列。