2

你如何用一组容量填充 NSMutableArray 以供以后使用?

基本上我想设置一个 NSMutableArray 作为我的游戏对象的地图,所以我有这条线......

gameObjects = [[NSMutableArray alloc] initWithCapacity:mapWidth*mapHeight];

我曾希望它会创建并填充我的 MutableArray,这样我就可以使用这种索引访问它......

int ii = (cellY*mapWidth)+cellX;

NSDictionary *currentObject = [gameObjects objectAtIndex:ii];

但我刚刚了解到 initWithCapacity 不会填充数组,所以我应该创建空白对象来填充它,还是有一个 Null 可以填充它?我也可以用 2 个 for 循环来做到这一点,还是有类似 "initWith:myObject" 的指令?

我希望能够检查数组中的某个索引以查看那里是否存在对象,因此我需要能够访问该索引点,并且我只能在那里有东西或者我得到一个越界错误。

我将把这个 NSMutableArray 用作对象网格,它是一个组织为二维数组的一维数组,所以我需要能够用 mapWidth*mapHeight 填充它,然后计算索引并执行检查数组中的那个索引。

我看过这里并用谷歌搜索,但找不到任何像我要问的东西。

感谢您的任何建议。

4

3 回答 3

4

我认为您正在寻找的是[NSNull null]. 这正是您想要的 - 占位符值。

您可以在此问题中找到有关该主题的更多信息。

于 2012-11-05T01:20:55.753 回答
3

initWithCapacity只是一种性能优化——它对数组行为没有影响,它只是让代码“隐藏起来”,而不必在添加更多条目时重复扩大内部数组。

所以如果你想要一个“预分配”的数组,你需要用 NSNull 对象或类似的东西来填充它。然后,您可以使用isKindOfClass来判断对象是否是正确的类型,或者只是==将条目与[NSNull null]. (因为只有一个 NSNull 对象,所以它总是有相同的地址)。

(或者您可以使用 C 风格的指针数组,其中nil包含空槽的值。)

但是你最好使用 NSMutableDictionary 来代替——不需要预先填充,如果元素不存在,你会得到一个nil指针。对于键,使用与您的数组索引相对应的 NSNumber 对象。

于 2012-11-05T01:42:34.230 回答
0

initWithCapacity只是暗示NSMutableArray它应该支持这么多对象。在您添加它们之前,它实际上不会有任何对象。此外,数组中的每个条目都是指向对象的指针,而不是标准 c 数组中通常具有的结构。

你需要改变你对问题的看法。如果你不向数组中添加一个对象,它就不在那里。因此,正如您所说,您可以用“空”对象预先填充数组,这很奇怪。或者,您可以根据需要添加对象。

于 2012-11-05T01:21:39.077 回答