首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ObjC:最好使用NSArray或NSDictionnary (zBuffer)?

ObjC:最好使用NSArray或NSDictionnary (zBuffer)?
EN

Stack Overflow用户
提问于 2012-04-28 17:04:37
回答 2查看 161关注 0票数 0

假设我有一个"node“实例的集合。将使用整数属性调用zIndex对它们进行分组。

将它们存储在以下位置有什么优缺点: 1)数组的数组2)数组的字典

在伪代码中,我会这样描述预期的结果:

代码语言:javascript
复制
zBuffer[100] = [node1, node 2];
zBuffer[105] = [playerNode, collectable1];
zBuffer[110] = [foreground1, foreground2];

我想知道zBuffers应该是什么;NSArrays是否只能用于顺序读/写?比如不使用非连续索引?

我尝试使用NSMutableArray:

代码语言:javascript
复制
[zBuffer objectAtIndex:zOrder]

但是,如果数组不包含该索引的数据(如越界异常),它就会失败。

谢谢你的建议!J

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-28 17:19:12

据我所知,您的要求之一是用于访问zBuffer的索引不连续(100、105、100)。在这种情况下,我不会使用数组,因为可以用于数组的索引必须小于数组元素的count (如果有3个元素,则索引的范围从0到2)。

相反,我会使用NSMutableDictionary,您可以使用zIndex键作为您正在查找的对象组的“名称”。

这个建议没有考虑到您可能有的任何其他需求,特别是关于复杂性和您将在节点集合上执行的操作类型(除了通过zIndex访问它们之外)。

票数 2
EN

Stack Overflow用户

发布于 2012-04-28 17:25:22

实际上,您可以同时提供这两种功能。看起来你想要的是一个稀疏数组:所以你是通过索引来查找对象的,但是在某个索引处没有对象是允许的。所以你可以做到。

为此,我创建了一个实现the primitive methods documentedNSMutableArray子类。在内部,您的子类将使用NSMutableDictionary进行存储,并将数字(“填充的”索引)作为键。如果此时数组为空,则-objectAtIndex:返回使用该数字作为其键的对象,或者返回nil

在这种数组契约的使用中有一些模棱两可的地方,应该由您来决定如何解决:

  • count是否返回1+(使用的最高索引)或数组中的对象数?
  • 枚举数和快速枚举模式从不期望看到nil,因此,如果您希望您的类的用户在数组上枚举数,则需要设计一个始终返回对象的枚举数(但让我看看它位于哪个索引)。
  • 您将无法使用初始化器的+arrayWithObjects: (id) firstObject,...模式初始化它,因为它们使用D14作为标记。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10362107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档