我正在为我的下一款iPhone游戏开发一款小型等距引擎。要存储地图单元格或图块,我需要一个2维数组。现在我用1维度假装它,它已经不够好了。
所以从我发现的网络中发现,在objective-c中我需要创建一个数组数组。 所以这是我的问题:如何根据我需要多少个地图行在运行时动态创建数组?
第一个阵列很简单:
NSMutableArray *OuterArray = [NSMutableArray arrayWithCapacity:mapSize];
现在我有第一个数组,应该包含每行所需的数组。 问题是,它可以是10但它也可以是200甚至更多。所以我不想手动创建每个数组然后添加它。我认为必须有一种方法可以在运行时根据输入创建所有这些数组,例如选择的mapsize。
希望你能帮助我 提前致谢 彼得答案 0 :(得分:1)
答案 1 :(得分:0)
NSMutableArray
可以包含您想要添加的任意数量的元素。 (虽然基于可用的堆)。
您只需要在此可变数组中添加元素(Array),就可以使用addObject
方法添加它。
所以你按如下方式创建一个MutableArray:
NSMutabaleArray *outerArray = [NSMutableArray array]; // initially contains 0 elements.
[outerArray addobject:<anotherArray>];
答案 2 :(得分:0)
NSMutableArray的重点是你不在乎。使用近似大小初始化两个维度,然后添加到它们。如果您的阵列超出初始估计值,则将增加后备存储以适应它。这会计算您的列(一阶数组)和行(二阶数组)。
修改强> 的
不确定您在评论中的含义。但这是动态在Objective-C中创建二维可变数组的一种方法。
NSUInteger columns = 25 ; // or some random, runtime number
NSUInteger rows = 50; // once again, some random, runtime number
NSMutableArray * outer = [NSMutableArray arrayWithCapacity: rows];
for(NSUInteger i; i < rows; i++) {
NSMutableArray * inner = [NSMutableArray arrayWithCapacity: columns];
[outer addObject: inner];
}
// Do something with outer array here
答案 3 :(得分:0)
从你拒绝其他答案我认为你不知道如何在循环中添加它们,或者我错了?
尝试:
for (i = 0; i < mapSize; i++)
[outerArray addObject: [[NSMutableArray alloc] init]];
或者,如果您知道或可以估计第二维的大小:
for (i = 0; i < mapSize; i++)
[outerArray addObject: [[NSMutableArray alloc]
initWithCapacity: your_2nd_d_size]];
现在,您如何填充数组,即获取内容的位置取决于您。在一个或多个循环中,您可以:
[(NSMutableArray *)[outerArray objectAtIndex: i]
addObject: your_current_object];