Obj-C和多维数组

时间:2011-01-31 08:08:26

标签: objective-c arrays

在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(随时学习)。

3 个答案:

答案 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阵列。