我有一个NSArray arr
。它有一堆NSNumber对象。我正在尝试使用GNU的GSL计算阵列的统计分析。 GSL将参数作为C风格的数组。
是否有任何机制可以对NSArray对象中的所有对象运行'intValue',并将结果转换为C风格的数组?
我真的不想将NSArray的内容复制到C风格的数组中,因为它浪费了空间和周期,所以我正在寻找替代方案。
答案 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数组中直接编写包含整数(或浮点数或双精度数等)的简单数组类,但是没有库存类。