我想问一下客观的C问题。我想在目标C中创建2D NSArray或NSMutableArray。我该怎么办?存储在数组中的对象是NSString *。非常感谢你。
答案 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];