如何填充具有设定容量的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填充它,然后计算出来索引并检查数组中的索引。
我在这里看了看谷歌,但找不到像我问的那样。
感谢您的任何建议。
答案 0 :(得分:4)
我认为你要找的是[NSNull null]
。这正是您想要的 - 占位符值。
您可以在this question。
中找到有关该主题的更多信息答案 1 :(得分:3)
initWithCapacity
只是一个性能优化 - 它对数组行为没有任何影响,它只是让代码“在幕后”不必在添加更多条目时重复放大内部数组。
因此,如果你想要一个“预先分配”的数组,你需要用NSNull对象或其他类似物填充它。然后,您可以使用isKindOfClass
来判断对象是否是正确的类型,或者只是==
将条目与[NSNull null]
进行比较。 (因为只有一个NSNull对象,它总是有相同的地址)。
(或者您可以使用带有nil
值的C风格指针数组作为空插槽。)
但是你可能最好使用NSMutableDictionary - 不需要预填充,如果元素不存在,你会得到一个nil
指针。对于键,使用与数组索引相对应的NSNumber对象。
答案 2 :(得分:0)
initWithCapacity
仅提示NSMutableArray
它应该支持这么多对象。在添加它们之前,它实际上不会有任何对象。此外,数组中的每个条目都是指向对象的指针,而不是像标准c数组中通常所拥有的结构。
您需要改变您对问题的看法。如果您没有向数组添加对象,则它不在那里。所以要么就像你说的那样用“空”对象预先填充数组,这很奇怪。或者您可以根据需要添加对象。