如何在目标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];
编辑使我的答案更适用于这个问题。最初我没有注意到你正在寻找一个二维数组。如果您知道多少您需要预先多少,您可以交错数据并迈进一步。我知道,可能有其他(更客观的标准)方法,让数组在数组内部,但对我来说会变得混乱。数组内部的数组不是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];
不回答问题(OP询问有关二维数组),并且启动不正确(索引从0开始,因此最后一个对象的索引是i-1,而不是i)。 – 2010-07-16 02:21:16
我没有注意到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
谢谢您的答复。是否有可能创建一个动态数组而不是在开始时设置长度? – Questions 2010-07-16 01:42:22
@MarkSiu,是的。如果你想,我可以给你一个这样的例子。 – 2010-07-16 01:46:13
谢谢你的回复。你介意给我举个例子吗?非常感谢你。 – Questions 2010-07-16 01:52:33