如何从NSArray中创建一个C向量或数组?

时间:2021-10-30 21:20:34

Is that possible? I've seen no method that would generate a plain old C vector or array. I have just NSNumber objects in my array which I need as C vector or array.

这有可能吗?我还没有见过生成普通的旧C向量或数组的方法。我的数组中有NSNumber对象我需要它作为C向量或数组。

2 个解决方案

#1


5  

An alternative to mouviciel's answer is to use NSArray's getObjects:range: method.

另一种方法是使用NSArray的getobject:range:方法。

id cArray[10];
NSArray *nsArray = [NSArray arrayWithObjects:@"1", @"2" ... @"10", nil];

[nsArray getObjects:cArray range:NSMakeRange(0, 10)];

Or, if you don't know how many objects are in the array at compile-time:

或者,如果您不知道在编译时数组中有多少对象:

NSUInteger itemCount = [nsArray count];
id *cArray = malloc(itemCount * sizeof(id));

[nsArray getObjects:cArray range:NSMakeRange(0, itemCount)];

... do work with cArray ...

free(cArray);

#2


1  

If you need your C array to carry objects, you can declare it as :

如果您需要您的C数组来携带对象,您可以将其声明为:

id cArray[ ARRAY_COUNT ];

or

id * cArray = malloc(sizeof(id)*[array count]);

Then you can populate it using a loop:

然后您可以使用循环填充它:

for (int i=0 ; i<[array count] ; i++)
    cArray[i] = [array objectAtIndex:i];

#1


5  

An alternative to mouviciel's answer is to use NSArray's getObjects:range: method.

另一种方法是使用NSArray的getobject:range:方法。

id cArray[10];
NSArray *nsArray = [NSArray arrayWithObjects:@"1", @"2" ... @"10", nil];

[nsArray getObjects:cArray range:NSMakeRange(0, 10)];

Or, if you don't know how many objects are in the array at compile-time:

或者,如果您不知道在编译时数组中有多少对象:

NSUInteger itemCount = [nsArray count];
id *cArray = malloc(itemCount * sizeof(id));

[nsArray getObjects:cArray range:NSMakeRange(0, itemCount)];

... do work with cArray ...

free(cArray);

#2


1  

If you need your C array to carry objects, you can declare it as :

如果您需要您的C数组来携带对象,您可以将其声明为:

id cArray[ ARRAY_COUNT ];

or

id * cArray = malloc(sizeof(id)*[array count]);

Then you can populate it using a loop:

然后您可以使用循环填充它:

for (int i=0 ; i<[array count] ; i++)
    cArray[i] = [array objectAtIndex:i];