【发布时间】:2015-02-03 13:31:52
【问题描述】:
我有以下代码,我试图将整数的 3D 数组包装在 NSArray 中,因为我无法在 C 中返回多维数组。谁能建议我如何以一种允许轻松访问数组的方式实现它函数返回后?
-(NSArray *) Foo{
int array[2][[self getWidth]][[self getHeight]];
int x = 0;
int y = 0;
for (int i = 0; i < [self getWidth]; i++) {
for (int j = 0; i < [self getHeight]; j++) {
// get th values for current position
tmp = [NSMutableArray arrayWithArray:[self convertAtPoint:i withYValue:j]];
x = (int) [tmp objectAtIndex:0];
y = (int) [tmp objectAtIndex:1];
array[0][i][j] = x;
array[1][i][j] = y;
}
}
// How can i put the 3D array into a NSArray?
NSArray *returnArr = [[NSArray alloc] init];
return returnArr;
}
【问题讨论】:
-
如果你使用
malloc在堆上分配它,你可以返回一个多维数组。如果您想将其存储在NSArray中,您可以将数据展平并将其存储在一维中。您执行此操作的方式取决于您是否需要列优先或行优先排序,但一种方法是index = HEIGHT*WIDTH*z + WIDTH*y + x。 -
注意:您不能像这样将未装箱的
ints 存储在NSArray中。NSArray仅包含 Objective-C 对象,因此如果您想将ints 存储在一个中,您可以将它们包装在NSNumber实例中。 -
即便如此,在我将它们存储为 NSNumbers 之后,是否可以将它们包装成 3 个维度?
-
也许你最好为你的三维数组创建你自己的包装对象。除此之外,您可以将
NSArrays 放入NSArrays,最后将 NSNumber 放入最后一个数组。
标签: ios objective-c c cocoa-touch nsarray