2012-06-24 12 views
5

Czy jest lepszy sposób na wypełnienie tablicy cyframi niż to, z czego korzystam? To szalone, ile muszę napisać, aby wypełnić tablicę liczbami, aby mogły być użyte do obliczeń w pętli. Jest to łatwiejsze w innych językach opartych na C, takich jak PHP, As3 lub Java.Cel C - Tablica z liczbami

NSArray *myArray = [NSArray arrayWithObjects: 
        [NSNumber numberWithInt:1000],[NSNumber numberWithInt:237], [NSNumber numberWithInt:2673], nil]; 

int total = 0; 
for(int i = 0; i < [myArray count]; i += 1){ 
    total += [[myArray objectAtIndex: i]intValue]; 
    NSLog(@"%i", total); 
} 

Mam nadzieję, że nie jest krótsza droga ... Ja po prostu chcę, aby wypełnić tablicę z int ... mogę być trudne

+2

Żaden z tych języków nie jest "oparty na C". –

+0

Dla niektórych rzeczy, które mają być obiektami 'NSNumber', mogą być przechowywane w kolekcjach i automatycznie kodowane/dekodowane do plików/strumieni sieciowych, itp. Dla innych rzeczy możesz chcieć dobrych starych C int w tablicy C, dla super szybkiego wyszukiwania i użycie (na przykład tabela częstotliwości w funkcji przetwarzania dźwięku). W Objective-C możesz wybrać, który jest najbardziej odpowiedni, obsługuje oba. – jhabbott

Odpowiedz

10

Chyba trzeba użyć NSNumber dla NSArray. Jeśli chcesz użyć ints Chyba trzeba by użyć tablicę C:

NSInteger myArray[20]; 

for (int i=0;i<20;i++) { 
    int num=myArray[i]; 

    //do something 
} 

NSNumber mimo to myślę, że lepszym rozwiązaniem dla tego języka. przynajmniej można zrobić szybki wyliczanie skrócić kod nieco:

for (NSNumber *n in myArray) { 
int num = [n intValue]; 

//do something.... 

} 

EDIT:

Pytanie zostało zadane 3 lata temu. Były nowe literały ustalone, aby ułatwić tworzenie obiektów takich jak NSNumbers lub NSArrays:

NSNumber *n = @100; 

lub

NSArray *array = @[@100,@50,@10]; 
+0

DZIĘKUJEMY MARIO ... – mogio

+0

nie jest to prob ... nie krępuj się akceptować :) – Mario

+0

Opisana dosłownie składnia jest już dostępna: http://clang.llvm.org/docs/ObjectiveCLiterals.html –

0

Krótki Miły alternatywnych w pętli konkretnych liczb:

NSArray *numbers = [@"1000,237,2673" componentsSeparatedByString:@","]; 
for (NSString *i in numbers) { 
    [i intValue]; // Do something. 
} 
+0

ciekawy sposób ... dzięki Anne! – mogio

0

pierwszy start z macierzą C:

NSInteger myCArray = { 1000, 237, 2673 }; 
// calculate number of elements 
NSUInteger myCArrayLength = sizeof(myCArray)/sizeof(NSInteger; 

drugie, jeśli trzeba pętli NSArray dzięki tej tablicy i utworzyć:

NSMutableArray *myNSArray = [NSMutableArray arrayWithCapacity:myCArrayLength]; 
for(NSUInteger ix = 0; ix < myCArrayLength; ix++) 
    [myNSArray addObject:[NSNumber numberWithInteger:myCArray[ix]]; 

Można owinąć drugi kawałek kodu w górę w kategorii na NSArray jeśli robisz to dużo.

0

za późno. ale możesz zrobić także to.

int total = 0; 
nsarray *myArray = @[@1.8,@100,@299.8]; 
for(nsnumber *num in myArray){ 
total+=num; 
} 
+0

Wygląda na to, że ta składnia jest już uwzględniona w zaakceptowanej odpowiedzi - jaką wartość ma ponowne jej umieszczenie? – Krease