2012-06-24 4 views
5

Esiste un modo migliore per riempire un array di numeri rispetto a quello che utilizzo? È pazzesco quanto devo scrivere solo per riempire un array di numeri in modo che possano essere utilizzati per un calcolo in un ciclo. Questo è più semplice in altri linguaggi basati su C come PHP, As3 o Java.Objective C - Array With Numbers

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); 
} 

Speriamo che ci sia un modo più breve ... Voglio solo di riempire un array con interi ... non posso essere così difficile

+2

Nessuna di queste lingue è "C-based". –

+0

Per alcune cose che si desiderano oggetti 'NSNumber', possono essere archiviate in raccolte e codificate/decodificate automaticamente in file/flussi di rete, ecc. Per altre cose si possono volere vecchi C ints in un array C, per una ricerca superveloce e utilizzo (ad esempio una tabella di frequenza in una funzione di elaborazione audio). In Objective-C puoi scegliere quale è il più appropriato, supporta entrambi. – jhabbott

risposta

10

Credo che si deve usare per un NSNumber NSArray. Se si desidera utilizzare int immagino ci si deve utilizzare un array c:

NSInteger myArray[20]; 

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

    //do something 
} 

NSNumber è però Credo che l'approccio migliore per questa lingua. almeno si può fare l'enumerazione veloce per accorciare un po 'di codice:

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

//do something.... 

} 

EDIT:

La domanda è stato chiesto 3 anni fa. Ci sono stati nuovi letterali stabiliti per rendere più facile la creazione di oggetti come NSNumbers o NSArrays:

NSNumber *n = @100; 

o

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

GRAZIE MARIO ... – mogio

+0

non è un problema ... sentitevi liberi di accettare :) – Mario

+0

La sintassi letterale descritta è già disponibile: http://clang.llvm.org/docs/ObjectiveCLiterals.html –

0

Nizza breve alternativi per looping interi specifici:

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

modo interessante ... grazie Anne! – mogio

0

primo avvio con una matrice C:

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

In secondo luogo, se avete bisogno di un NSArray ciclo attraverso questo array e crearne uno:

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

si può avvolgere il secondo pezzo di codice come una categoria a NSArray se si sta facendo un sacco.

0

troppo tardi. ma puoi fare anche questo.

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

Sembra che questa sintassi sia già inclusa nella risposta accettata, che valore ha di nuovo? – Krease