从NSArray的对象获取C样式数组

时间:2011-09-05 21:37:42

标签: objective-c arrays xcode4 nsarray gsl

我有一个NSArray arr。它有一堆NSNumber对象。我正在尝试使用GNU的GSL计算阵列的统计分析。 GSL将参数作为C风格的数组。

是否有任何机制可以对NSArray对象中的所有对象运行'intValue',并将结果转换为C风格的数组?

我真的不想将NSArray的内容复制到C风格的数组中,因为它浪费了空间和周期,所以我正在寻找替代方案。

2 个答案:

答案 0 :(得分:4)

您正在描述的机制 - 在NSArray中的所有对象上运行intValue并提供C风格的数组 - 似乎与您描述的“浪费空间和周期”完全相同。如果你需要一个C风格的int数组,这也是唯一真正的方法。我能想到的最佳方法:

int *c_array = malloc(sizeof(int) * [yourArray count]);
[yourArray enumerateObjectsWithOptions:NSEnumerationConcurrent 
                            usingBlock:^(id number, NSUInteger index, BOOL *unused) {
    c_array[index] = [number intValue];
}];

答案 1 :(得分:0)

试试这个:

id *numArray = calloc(sizeof(id), yourArray.count);
[yourArray getObjects: numArray range: NSMakeRange(0, yourArray.count)];

它为您提供了NSNumbers的C数组。一个给你注意的替代方案:

int *numArray = calloc(sizeof(int), yourArray.count);
for (int i = 0; i< yourArray.count; i++)
    numArray[i] = [[yourArray objectAtIndex: i] intValue];

无法告诉yourArray直接返回整数的C数组。 NSArray没有其内容的概念,除了它们是id,并且必须在适当的时间保留和释放。它最多可以返回一个C数组的id,如我的第一个例子所示。

您可以在内部C数组中直接编写包含整数(或浮点数或双精度数等)的简单数组类,但是没有库存类。