我是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多维数组循环复杂。
对此有何想法?
答案 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是一种面向对象的语言。建立一个满足您需求的课程。