2011-01-10 16 views
15

Sono appena agli inizi e sto cercando un modo semplice per sommare un array semplice. Ho letto nel sito degli sviluppatori di Apple la codifica dei valori chiave e non capisco come applicarlo al mio array o se questo è il modo appropriato per riassumere questo.Sum a Array - Objective-C

Il mio inciampo con la codifica del valore chiave è il .keypathToProperty - Posso capire che è necessario un ulteriore riferimento in un array 2D ma non mostrano il codice dell'array, solo il keypath al titolo del fila così non riesco ancora a capirlo.

NSMutableArray *numArray = [NSMutableArray arrayWithCapacity:4]; 
    [numArray addObject:num1]; 
    [numArray addObject:num2]; 
    [numArray addObject:num3]; 
    [numArray addObject:num4]; 

Apprezzo le risposte!

Grazie

Graham

risposta

71

Il modo automatico per farlo è:

NSNumber * sum = [numArray valueForKeyPath:@"@sum.self"]; 

Ma se sei solo agli inizi, consiglio di evitare gli operatori chiave del percorso di raccolta e andare per il modo più semplice:

double sum = 0; 
for (NSNumber * n in numArray) { 
    sum += [n doubleValue]; 
} 
+7

Cavolo, io non sapeva di '@ sum.self', wow, ogni giorno mi viene in mente quanto io non lo so. –

+0

È interessante notare che esistono anche chiavi come "max.self", "min.self" ... Soluzione eccezionale .. – Ankit

0

Swift 3: (Dave DeLong's method trasformati):

let sum = (numArray as AnyObject).value(forKeyPath:"@sum.self") as! Double 

questo dovrebbe funzionare in maniera simile alla sua controparte Objective-C.

+1

So che lo stai facendo come un esempio di utilizzo di keypaths, ma per i nuovi lettori Swift, tu potrebbe voler usare invece una riduzione! 'let sum = numArray.reduce (0) {$ 0 + $ 1}' –

+1

@MikeSprague: Non sono in disaccordo con te su quale potrebbe essere più appropriato, anche se sono interessato al tuo ragionamento sul perché un metodo alternativo non dovrebbe essere presentato Il motivo per cui mi piace questo metodo è che per la quantità di codice in questione funziona abbastanza bene per un array che contiene numeri interi e valori di stringa misti. –

0

a Swift 4:

let array = [1,2,3,5] 
let sum = array.reduce(0, {$0 + $1}) 
print(sum)