在iOS中创建可变长度的二维数组

时间:2012-10-11 22:28:41

标签: ios

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,...等。因为每个人都拥有一组共享某些共性的元素。我不想在大数组中堆积所有内容。

3 个答案:

答案 0 :(得分:0)

您已经在创建一个可变长度的二维数组,因为您在整个示例中使用的是NSMutableArray而不是NSArray。

这意味着您可以致电:

  • addObject:将对象附加到数组的末尾。
  • removeObjectAtIndex:从数组中删除。
  • insertObject:atIndex:在数组的任何位置插入项目。

答案 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数组。只要它们具有相同的大小,并且您愿意处理mallocfree内存块,就可以使用直接C数组。