2011-03-05 17 views
1

我知道要在Object-c中使用整數創建數組,他們必須是對象。 所以如果我想與整數數組我應該像創建它們:數組中的整數

的NSNumber * myArrayInteger = [NSNumber的 NumberWithInteger:2];

到目前爲止,這麼好。 但是如果我不想組成數組可以說超過30個整數。我應該使用上面的每個代碼還是有更友好的解決方案?

+0

一個普通的C數組會很多更容易。 'int myArrayInteger [30];' – Mahesh 2011-03-05 09:01:15

回答

3

NSArray只能包含對象,而不是像int,float等原始類型。所以你需要用NSNumber對象包裝它們。對於30個整數,你需要將它們全部包裝在NSNumber中,如果可能的話可以使用循環。

但是有一點Obj-C是C的超集。所以如果你願意,你可以使用純C的int數組。有時(特別是對於更高維數組)他們更適合維護。

int arr[30];
+0

謝謝!我知道「C」解決方案,但我很好奇在Objective-C中該怎麼做。使用循環進行這樣的任務看起來很奇怪。 – 2011-03-05 09:07:09

+0

對於很多事情來說,Obj-C依賴於C.例如,我們需要使用C語法來指針。數組也一樣。如果你認爲C數組會很好,那就使用它。沒有問題,也不是不好的做法。 Obj-C本身沒有任何特殊的數組語法。 – taskinoor 2011-03-05 12:59:11

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