Normall,XCode中固定的二维数组就像这样
NSMutableArray * myBig2dArray = [[NSMutableArray alloc] init];
// first internal array
NSMutableArray * internalElement = [[[NSMutableArray alloc] init] autorelease];
[internalElement addObject:@"First - First"];
[internalElement addObject:@"First - Second"];
[myBig2dArray addObject:internalElement];
// second internal array
internalElement = [[[NSMutableArray alloc] init] autorelease];
[internalElement addObject:@"Second - First"];
[internalElement addObject:@"Second - Second"];
[myBig2dArray addObject:internalElement];
但是如何创建可变长度的2D阵列? 我没有每个单独数组的长度,我不知道我需要多少totoal内部数组。这完全取决于需求
那么我该如何创建呢?
哦,还有一件事,我需要能够解决单个内部数组,internal1,internal2,...等。因为每个人都拥有一组共享某些共性的元素。我不想在大数组中堆积所有内容。
答案 0 :(得分:0)
您已经在创建一个可变长度的二维数组,因为您在整个示例中使用的是NSMutableArray而不是NSArray。
这意味着您可以致电:
答案 1 :(得分:0)
我想你已经回答了自己的问题。只需创建主NSMutableArray,然后在需要时添加内部NSMutableArray。由于数组是可变的,您可以在主数据或“大”数组的任何索引号处将任何对象添加到任何内部数组。
像这样添加:[[myBig2dArray objectAtIndex:2] addObject:@“someObject”];
像这样删除:[[myBig2dArray objectAtIndex:1] removeObjectAtIndex:0];
你必须确保主数组的每个对象都是另一个NSMutableArray
答案 2 :(得分:0)
我相信你问题中的代码已经是解决方案了。您指的是需要解决各个内部数组。这只是:
[[myBig2dArray objectAtIndex:1] objectAtIndex:1];
例如,。新的NSArray
字面语法使看起来更像是其他语言中的二维数组,例如。
myBig2dArray[1][1];
您将遇到的问题是内部数组大小不同。因此,您将不得不注意数组索引的范围检查。
另外两个建议 - 我很惊讶很少我需要这样做。几乎总是有更好的结构化数据的方法。其次,如果确实需要多维数组,那么您可以下拉到C来实现这一点,具体取决于您需要在数组中存储的数据类型。您可以创建指向Objective-C对象的多维C数组。只要它们具有相同的大小,并且您愿意处理malloc
和free
内存块,就可以使用直接C数组。