数组中的整数

时间:2011-03-05 08:49:55

标签: objective-c arrays

我知道要在Object-c中创建带整数的数组,它们必须是对象。 所以,如果我想要整数数组,我应该创建它们:

  

NSNumber * myArrayInteger = [NSNumber   NumberWithInteger:2];

到目前为止,这么好。 但是如果我想要组成的数组让我们说超过30个整数。我应该为每个代码使用上面的代码还是有一个更友好的解决方案?

2 个答案:

答案 0 :(得分:3)

NSArray只能包含对象,而不是像int,float等原始类型。所以你需要用NSNumber对象包装它们。对于30个整数,您需要将它们全部包装在NSNumber中,如果可能的话可以使用循环。

但有一点是Obj-C是C的超级集合。所以你可以根据需要使用int的纯C数组。有时(特别是对于更高维度的阵列)它们更适合维护。

int arr[30];

答案 1 :(得分:3)

就个人而言,我发现自己经常使用整数数组,因此我不得不简化流程。例如:

NSArray myList=klist(4,2,3,2,3);

等同于:

NSArray myList = [NSArray arrayWithObjects:
    [NSNumber numberWithInt:2],
    [NSNumber numberWithInt:3],
    [NSNumber numberWithInt:2],
    [NSNumber numberWithInt:3],nil];

以下是我使用的功能:

#define kInt(x) [NSNumber numberWithInt:x]
#define kArray(...) [NSMutableArray arrayWithObjects: __VA_ARGS__,nil]
#define klist(...) [arrays iList:__VA_ARGS__]
#define k1ist(x) [arrays iList:1,x]
#define krange(x) [arrays range:x]
#define kAppend(...) [arrays append_arrays:__VA_ARGS__,nil]

@interface arrays : NSObject 
{}
+(NSMutableArray *) range:(int) i;
+(NSMutableArray *) iList:(int) n, ...;
@end

@implementation arrays
+(NSMutableArray *) range:(int) i{
    NSMutableArray *myRange = [NSMutableArray array];
    for (int I=0;I<i;I++)
    {
        [myRange addObject:kInt(I)];
    }
    return myRange;
}
+(NSMutableArray *) iList:(int) n, ...{
    int ii;
    NSMutableArray *myRange = [NSMutableArray array];
    va_list myArgs;
    va_start(myArgs,n);
    for (int i=0;i<n;i++){
        ii = va_arg(myArgs,int);
        [myRange addObject: kInt(ii)];
    }
    return myRange;
}
@end