如何在目标C中创建2D NSArray或NSMutableArray?

问题描述:

我想问一下关于目标C的问题。我想在目标C中创建一个2D NSArray或NSMutableArray。我该怎么做?存储在数组中的对象是NSString *。非常感谢。如何在目标C中创建2D NSArray或NSMutableArray?

这当然是可能的,但我认为值得注意的是NSArrays只能容纳对象,而不是原始类型。

解决此问题的方法是使用原始包装类型NSNumber

NSMutableArray *outer = [[NSMutableArray alloc] init]; 

NSMutableArray *inner = [[NSMutableArray alloc] init]; 
[inner addObject:[NSNumber numberWithInt:someInt]]; 
[outer addObject:inner]; 
[inner release]; 

//do something with outer here... 
//clean up 
[outer release]; 
+0

谢谢您的答复。是否有可能创建一个动态数组而不是在开始时设置长度? – Questions 2010-07-16 01:42:22

+1

@MarkSiu,是的。如果你想,我可以给你一个这样的例子。 – 2010-07-16 01:46:13

+0

谢谢你的回复。你介意给我举个例子吗?非常感谢你。 – Questions 2010-07-16 01:52:33

编辑使我的答案更适用于这个问题。最初我没有注意到你正在寻找一个二维数组。如果您知道多少您需要预先多少,您可以交错数据并迈进一步。我知道,可能有其他(更客观的标准)方法,让数组在数组内部,但对我来说会变得混乱。数组内部的数组不是2维数组。这只是其中一个对象的第二个维度。你必须为每个对象添加一个数组,这不是我认为的二维数组。对或错我通常以对我有意义的方式做事。

因此,可以说,你需要一个6x6的阵列:

int arrayStride=6; 
int arrayDepth=6; 
NSMutableArray *newArray = [[NSMutableArray alloc] initWithCapacity:arrayStride*arrayDepth]; 

我更喜欢用对象填充它初始化数组;

for(int i=0; i<arrayStride*arrayDepth; i++) [newArray addObject @"whatever"]; 

然后后,您可以通过firstDim访问的对象+ secondDim * 6

int firstDim = 4; 
int secondDim = 2; 
NSString *nextString = [newArray objectAtIndex:firstDim+secondDim*6]; 
+0

不回答问题(OP询问有关二维数组),并且启动不正确(索引从0开始,因此最后一个对象的索引是i-1,而不是i)。 – 2010-07-16 02:21:16

+0

我没有注意到2D的东西...是的,我的我是不正确的最后一个对象。感谢您指出。我改变了我的答案,我会做一个2D数组。 – badweasel 2010-07-16 04:24:12

与NSNumbers作为键和数组作为对象的尝试的NSMutableDictionary。一个维度将成为关键,另一个维度将成为对象。

要创建特定的 “二维数组”

NSMutableDictionary *twoDArray = [NSMutableDictionary dictionary]; 
for (int i = 0; i < 10; i++){ 
    [twoDArray setObject:arrayOfStrings forKey:[NSNumber numberWithInt:i]]; 
} 

提取数据

NSString *string = [[twoDArray objectForKey:[NSNumber numberWithInt:3]] objectAtIndex:5]; 
//will pull string from row 3 column 5 -> as an example