多维数组 - 在Objective-C中使用它们最方便的方法是什么?

时间:2010-07-08 10:17:41

标签: objective-c multidimensional-array

我是Objective-C的初学者,我正在尝试找到在Objective-C中使用多维数组的最方便的方法。要么我缺少某些东西,要么与他们一起工作非常难看。

假设我们有一个经典问题:

  • 从文件中读取输入;在第一行,由空格(“”)分隔的是矩阵的宽度和高度(例如:3 4
  • 在以下行中有上述值所描述的内容

例如:

3 4
a b c d
e f g h
i j k l

我想到的第一个解决方案是:

NSMutableArray *matrix = [[NSMutableArray alloc] initWithCapacity: x]; //x = 3 in this specific case
NSMutableArray *cell;
for(cell in matrix)
{
    cell = [NSMutableArray initWithCapacity: y];
    for(int i = 0; i < y; i++) // y = 4
    {
        //object is a NSString containing the char[i][j] read from the file
        [cell insertObject:object atIndex: i];
    }
}

在考虑如何在多维数组中从文件中读取值时,这是我想到的第一件事。我知道你可以使用C数组,但由于我将NSObject存储在其中,我认为这不是一个好主意。尽管如此,从我的角度来看,很容易使用C数组而不是Objective-C的解决方案。

还有另一种方法可以在obj-c中构建一个多维数组并且比上面的方法更容易吗?

循环它们怎么样? 我知道我可以做点什么

NSArray *myArray;
for(int i=0; i < [array count]; i++)
{
    [myArray arrayWithArray: [array objectAtIndex: i]];
    for(int j=0; j < [myArray count]; j++)
    {
        NSLog(@"array cell [%d,%d]: %s", i, i, [myArray objectAtIndex: j]);
    }
}

但这仍然比你的普通C多维数组循环复杂。

对此有何想法?

5 个答案:

答案 0 :(得分:1)

Objective-C是C的超集,如果你想像在C中那样使用多维数组,那就这样做吧。如果你想使用Cocoa方式处理对象,那也没关系,但你会编写更多的代码来完成它。

答案 1 :(得分:0)

你能不能简单地创建一个id数组?

#import <Foundation/Foundation.h>

int main(int argc, char **argv) {

        id ptr[3][4];
        NSObject *p;

        ptr[0][0] = p;

}

答案 2 :(得分:0)

在这方面,您无法使用NSArray或NSMutableArray。那就是

objectAtIndex:i :j

答案 3 :(得分:0)

您始终可以创建大小为width * height的一维数组:

const int size = width*height;
NSMutableArray *array = [NSMutableArray arrayWithCapacity:size];

for (int i=0; i<size; ++i) {
    NSString *string = [NSString stringWithFormat:@"col=%d, row=%d", i%width, i/width];
    [array insertObject:string atIndex:i];
}

答案 4 :(得分:-2)

没有人在任何计算机语言中使用任何大小的直接多维数组(除了家庭作业)。他们只是使用太多的内存,因此太慢。 Objective-C是一种面向对象的语言。建立一个满足您需求的课程。