假设我有一个"node“实例的集合。将使用整数属性调用zIndex对它们进行分组。
将它们存储在以下位置有什么优缺点: 1)数组的数组2)数组的字典
在伪代码中,我会这样描述预期的结果:
zBuffer[100] = [node1, node 2];
zBuffer[105] = [playerNode, collectable1];
zBuffer[110] = [foreground1, foreground2];我想知道zBuffers应该是什么;NSArrays是否只能用于顺序读/写?比如不使用非连续索引?
我尝试使用NSMutableArray:
[zBuffer objectAtIndex:zOrder]但是,如果数组不包含该索引的数据(如越界异常),它就会失败。
谢谢你的建议!J
发布于 2012-04-28 17:19:12
据我所知,您的要求之一是用于访问zBuffer的索引不连续(100、105、100)。在这种情况下,我不会使用数组,因为可以用于数组的索引必须小于数组元素的count (如果有3个元素,则索引的范围从0到2)。
相反,我会使用NSMutableDictionary,您可以使用zIndex键作为您正在查找的对象组的“名称”。
这个建议没有考虑到您可能有的任何其他需求,特别是关于复杂性和您将在节点集合上执行的操作类型(除了通过zIndex访问它们之外)。
发布于 2012-04-28 17:25:22
实际上,您可以同时提供这两种功能。看起来你想要的是一个稀疏数组:所以你是通过索引来查找对象的,但是在某个索引处没有对象是允许的。所以你可以做到。
为此,我创建了一个实现the primitive methods documented的NSMutableArray子类。在内部,您的子类将使用NSMutableDictionary进行存储,并将数字(“填充的”索引)作为键。如果此时数组为空,则-objectAtIndex:返回使用该数字作为其键的对象,或者返回nil。
在这种数组契约的使用中有一些模棱两可的地方,应该由您来决定如何解决:
count是否返回1+(使用的最高索引)或数组中的对象数?nil,因此,如果您希望您的类的用户在数组上枚举数,则需要设计一个始终返回对象的枚举数(但让我看看它位于哪个索引)。+arrayWithObjects: (id) firstObject,...模式初始化它,因为它们使用D14作为标记。https://stackoverflow.com/questions/10362107
复制相似问题