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

时间:2010-07-16 01:31:27

标签: objective-c nsmutablearray nsarray

我想问一下客观的C问题。我想在目标C中创建2D NSArray或NSMutableArray。我该怎么办?存储在数组中的对象是NSString *。非常感谢你。

3 个答案:

答案 0 :(得分:5)

这当然是可行的,但我认为值得注意的是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];

答案 1 :(得分:1)

尝试NSMutableDictionary,NSNumbers作为键,数组作为对象。一个维度是键,另一个维度是对象。

创建特定的“2D阵列”

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

答案 2 :(得分:-1)

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

因此,假设您需要一个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];