0

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

是否有任何机制可以,例如,在 NSArray 对象中的所有对象上运行“intValue”,并将结果转换为 C 样式数组?

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

4

2 回答 2

4

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

int *c_array = malloc(sizeof(int) * [yourArray count]);
[yourArray enumerateObjectsWithOptions:NSEnumerationConcurrent 
                            usingBlock:^(id number, NSUInteger index, BOOL *unused) {
    c_array[index] = [number intValue];
}];
于 2011-09-05T21:48:27.417 回答
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 数组中编写自己的简单数组类,其中包含整数(或浮点数或双精度数等),但没有用于此的股票类。

于 2011-09-05T22:32:34.943 回答