0

Normall, a fixed 2-D arrays in XCode would be like this

   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];

But How do I create variable length 2D array? I don't the length of each indiviudal array and I don't know how many totoal internal arrays I needed. It's all based on the need

So how do I create that?

Oh one more thing, I need to be able to address individual internal arrays, internal1, internal2, ...etc like that. Because each one holds a set of elements that share certain commonalities. I don't want to pile everything inside the big array.

4

3 回答 3

0

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

这意味着您可以调用:

  • addObject:将对象附加到数组的末尾。
  • removeObjectAtIndex:从数组中删除。
  • insertObject:atIndex: 在数组的任何位置插入一个项目。
于 2012-10-11T22:39:45.907 回答
0

我相信您在问题中的代码已经是解决方案。您指的是需要解决单个内部数组。这只是:

[[myBig2dArray objectAtIndex:1] objectAtIndex:1];

例如。新的NSArray文字语法使看起来更像其他语言中的二维数组,例如

myBig2dArray[1][1];

您将遇到的问题是不同的内部数组大小。因此,您将不得不注意对数组索引的范围检查。

另外两个建议 - 我很惊讶我很少需要这样做。几乎总是有更好的数据结构方式。其次,如果真的需要多维数组,那么你也许可以下拉到 C 来实现这一点,这取决于你需要在数组中存储什么类型的数据。您可以创建指向 Objective-C 对象的指针的多维 C 数组。只要它们的大小相同,并且您愿意处理malloc内存free块,就可以使用直接的 C 数组。

于 2012-10-12T02:54:19.087 回答
0

我想你已经回答了你自己的问题。只需创建主要的 NSMutableArray ,然后在需要时添加一个内部的。由于数组是可变的,您可以在主数组或“大”数组的任何索引号处将任何对象添加到任何内部数组。

像这样添加: [[myBig2dArray objectAtIndex:2] addObject:@"someObject"];

像这样删除: [[myBig2dArray objectAtIndex:1] removeObjectAtIndex:0];

你只需要确保主数组的每个对象都是另一个 NSMutableArray

于 2012-10-11T22:42:15.547 回答