我有一个 NSArray arr
。它有一堆 NSNumber 对象。我正在尝试使用 GNU 的 GSL 计算数组的统计分析。GSL 将参数作为 C 样式的数组。
是否有任何机制可以,例如,在 NSArray 对象中的所有对象上运行“intValue”,并将结果转换为 C 样式数组?
我真的不想将 NSArray 的内容复制到 C 样式的数组中,因为它浪费空间和周期,所以我正在寻找替代方案。
我有一个 NSArray arr
。它有一堆 NSNumber 对象。我正在尝试使用 GNU 的 GSL 计算数组的统计分析。GSL 将参数作为 C 样式的数组。
是否有任何机制可以,例如,在 NSArray 对象中的所有对象上运行“intValue”,并将结果转换为 C 样式数组?
我真的不想将 NSArray 的内容复制到 C 样式的数组中,因为它浪费空间和周期,所以我正在寻找替代方案。
你所描述的机制——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];
}];
试试这个:
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 数组中编写自己的简单数组类,其中包含整数(或浮点数或双精度数等),但没有用于此的股票类。