【问题标题】:objective-c accessing arraysObjective-C 访问数组
【发布时间】:2011-05-05 10:57:56
【问题描述】:

我做了以下尝试创建 2d 和 3d 数组:

Array1 = [[NSMutableArray alloc]init];
Array2 = [[NSMutableArray alloc]init];
Array3 = [[NSMutableArray alloc]init];

for loop 
[Array1 insertObject:Array2 atIndex:i];
//some code....
[Array2 insertObject:Array3 atIndex:j];

我不确定这是否正确,但每次我在代码中循环时,我都会将 Array2 添加到 Array1 中的新索引中,但我注意到这是否有效。换句话说,我希望我不要每次都再次移动整个数组?!!

现在我的问题是我需要通过在array1 中循环访问array2,然后通过array2 访问array3。我只需要知道如何使用循环访问这些数组,以便我可以显示每个数组的内容。我需要做类似这样的数组 [i][j] 其中“i”代表array1,“j”代表array2

【问题讨论】:

  • 你要做什么伙计???
  • 为了它的价值,请不要以大写字母开头的变量名。

标签: iphone objective-c arrays ios4 multidimensional-array


【解决方案1】:

创建 3d 数组 (NxMxP):

NSMutableArray *array3D = [[NSMutableArray alloc] initWithCapacity:N];

for (int i = 0; i < N; ++i)
{
    NSMutableArray *array2D = [[NSMutableArray alloc] initWithCapacity:M];
    for (int i = 0; i < M; ++i)
    {
        NSMutableArray *justAnArray = [[NSMutableArray alloc] initWithCapacity:P];
        [array2D addObject:justAnArray];
        [justAnArray release];
    }
    [array3D addObject:array2D];
    [array2D release];
}

使用这个生物:

[[[array3D objectAtIndex:3] objectAtIndex:4] objectAtIndex:1]; // it's like array3D[3][4][1]

【讨论】:

  • 您可以简单地使用array3D[3][4][1] 将返回存储在该位置的对象。而且更干净,更不乏味。
【解决方案2】:

只写我所理解的......
在循环中访问数组 do
for循环

 NSArray arr = [Array1 objectAtIndex:i] objectIndex:j]; 


会给arr[i][j];

【讨论】:

  • 好的,这就是我想要做的事情,但是由于我在数组中有 array2 并且按照你的建议做,程序是否理解第二个 objectIndex:j 是我添加到的 array2数组1 ??
  • 是的,它可以理解,因为内括号 [array1 objectAtIndex:i] 中的部分被解析为“array2”。解析完这些括号后,剩下的是外括号: [array2 objectAtIndex:j]
  • 这是一个常见问题,可能已经有很多重复问题了。您应该寻找术语“在objective-c中访问多维数组”。
【解决方案3】:

我不确定我是否正确理解你,但如果你想访问数组中的数组,你可以使用

    [[array1 objectAtIndex:i] objectAtIndex:j];

请通过这个 SO 问题How to create Array of Array in iPhone?

你需要这样的东西吗?

更新

NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"A",@"B",@"C",nil];
NSMutableArray *array2 = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",nil];
NSMutableArray *array3 = [[[NSMutableArray alloc] init] autorelease];
[array3 addObject:array2];
[array3 addObject:array1];
for(int i = 0; i < [array3 count]; i++)
  for(int j = 0; j<[array1 count]; j++)
    NSLog(@"From array3 %@",[[array3 objectAtIndex:i] objectAtIndex:j]);

【讨论】:

  • 好吧,我猜你明白我的意思是的,你是数组中的正确数组。对于你建议的例子,你能告诉我我应该如何初始化它吗?或者这就是我如何访问我所做的初始化?!!
  • 感谢更新,但我想它比我正在寻找的要复杂得多,并且网络上的所有示例都带有预定义的对象。我只需要知道我是否执行 [array1 addobject:array2] 我还能使用您的建议吗??
  • 查看我的更新,它将让您了解如何访问数组中的数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多