在运行时动态创建数组并添加到另一个数组

时间:2011-08-08 13:16:23

标签: iphone objective-c arrays programming-languages nsmutablearray

我正在为我的下一款iPhone游戏开发一款小型等距引擎。要存储地图单元格或图块,我需要一个2维数组。现在我用1维度假装它,它已经不够好了。

所以从我发现的网络中发现,在objective-c中我需要创建一个数组数组。 所以这是我的问题:如何根据我需要多少个地图行在运行时动态创建数组?

第一个阵列很简单:

NSMutableArray *OuterArray = [NSMutableArray arrayWithCapacity:mapSize];

现在我有第一个数组,应该包含每行所需的数组。 问题是,它可以是10但它也可以是200甚至更多。所以我不想手动创建每个数组然后添加它。我认为必须有一种方法可以在运行时根据输入创建所有这些数组,例如选择的mapsize。

希望你能帮助我 提前致谢 彼得

4 个答案:

答案 0 :(得分:1)

我认为前一个问题应该有所帮助。

2d arrays in objective c

与我无关。我从未拥有过iphone或试图为其编写代码。

答案 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];