Objective c Obj-C与多维阵列

Objective c Obj-C与多维阵列,objective-c,arrays,Objective C,Arrays,在Obj-C中处理多维数组的最佳方法是什么?我已经阅读了创建NStaseS的所有NSRANS的所有东西,使用C样式数组,甚至在STL中建议抛出,然后用C++样式数组…… 我需要一个三维的物体阵列。最好的事情是一堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆?这似乎令人费解。是否有任何对象可以在一个干净的api中处理n维数组 一个干净清晰的api示例: obj = [MDArray getLayer: 1 atX: 10

在Obj-C中处理多维数组的最佳方法是什么?我已经阅读了创建NStaseS的所有NSRANS的所有东西,使用C样式数组,甚至在STL中建议抛出,然后用C++样式数组…… 我需要一个三维的物体阵列。最好的事情是一堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆?这似乎令人费解。是否有任何对象可以在一个干净的api中处理n维数组

一个干净清晰的api示例:

obj = [MDArray getLayer: 1 atX: 10 atY: 10];
[MDArray setLayer: 1 atX: 10 atY: 10 withValue: object];

如果有什么不同的话,我的最终目标就是游戏的地图数据。我已经习惯了C风格的东西,但我正在努力使用obj-C(边学边用)。

正如Aurum在评论中所说,我建议您编写自己的多维数组包装器


这将是相对简单的-包装器将拥有数组的数组,但会公开您描述的方法,这些方法隐藏了遍历数组的相对丑陋的代码。

正如Aurum在评论中所说,我建议您编写自己的多维数组包装器


这将是相对简单的-包装器将拥有数组的数组,但公开像您描述的方法,这些方法隐藏了遍历数组的相对丑陋的代码。

标准库中没有多维数组。我会在我自己的课堂上总结这件事,这很简单。如果前一种解决方案速度较慢,那么实现将是嵌套的
NSArray
s或普通的C数组。

标准库中没有多维数组。我会在我自己的课堂上总结这件事,这很简单。如果前一种解决方案被证明速度较慢,那么实现将是嵌套的
NSArray
s或普通的C数组。

建议嵌套是很自然的,但这是浪费时间的,除非您需要能够处理稀疏数组的东西

更好的解决方案是创建一个NSMutableArray,并用NSNulls或NSPointerArray填充它,这允许通过
setCount:
方法使用nulls

然后,如果您需要,比如说,能够处理坐标(0..3,0..3,0..3)处的对象,即4*4*4(或64)个插槽

从这里开始,将(x,y,z)坐标转换为数组中的一个槽只是一个乘法问题;(1,2,3)是索引(1+(2*宽度)+(3*宽度*高度))处的对象


这一简单的数学运算避免了一堆额外的分配(以及额外分配碎片内存的可能性)。虽然我完全赞成不要过早地进行优化,但数学是简单的,而分配舞蹈则不是——首先,这将更容易实现。

建议嵌套是很自然的,但这是浪费时间,除非您需要能够实现稀疏阵列的东西

更好的解决方案是创建一个NSMutableArray,并用NSNulls或NSPointerArray填充它,这允许通过
setCount:
方法使用nulls

然后,如果您需要,比如说,能够处理坐标(0..3,0..3,0..3)处的对象,即4*4*4(或64)个插槽

从这里开始,将(x,y,z)坐标转换为数组中的一个槽只是一个乘法问题;(1,2,3)是索引(1+(2*宽度)+(3*宽度*高度))处的对象


这一简单的数学运算避免了一堆额外的分配(以及额外分配碎片内存的可能性)。虽然我完全赞成不要过早地进行优化,但数学是简单的,而分配舞蹈则不是——首先,这将更容易实现。

您可以使用
NSArray
with
NSArray
with
NSArray
。。。我的意思是,穿越这样一个结构相对简单。建议有点困难,因为你没有明确的目标,你想做什么。你正在处理的数据是什么?词典可能更合适。您还可以创建一个名为
MDArray
的子类,并编写代码,为您提供所需的对象。除非您遵循标准的Cocoa/UIKit模式[通过引用返回多个值],否则不要命名方法
get*
任何内容。@bbum-我可以查看一个url来了解Cocoa/UIKit的工作方式吗?当我返回一些东西时,我总是使用get*,这只是一种习惯。你可以使用
NSArray
NSArray
NSArray
。。。我的意思是,穿越这样一个结构相对简单。建议有点困难,因为你没有明确的目标,你想做什么。你正在处理的数据是什么?词典可能更合适。您还可以创建一个名为
MDArray
的子类,并编写代码,为您提供所需的对象。除非您遵循标准的Cocoa/UIKit模式[通过引用返回多个值],否则不要命名方法
get*
任何内容。@bbum-我可以查看一个url来了解Cocoa/UIKit的工作方式吗?我总是用get*当我归还东西时,所以这只是习惯。