2011-01-10 12 views
15

Ich fange gerade an und suche nach einem einfachen Weg, um ein einfaches Array zu summieren. Ich habe in die Entwicklerwebsite von Apple gelesen, wo es um die Schlüsselwertcodierung geht, und ich verstehe nicht, wie ich das auf mein Array anwenden kann oder ob dies der geeignete Weg ist, dies zu summieren.Summe ein Array - Objective-C

Mein Stolperstein mit dem Schlüssel Wert Codierung ist die .keypathToProperty - Ich kann verstehen, dass Sie eine weitere Referenz in einem 2D-Array benötigen, aber sie zeigen nicht den Array-Code, nur den Schlüsselpfad zum Titel der Reihe, damit ich es noch nicht herausfinden kann.

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

Ich schätze die Antworten!

Dank

Graham

Antwort

71

Die automatische Art und Weise, es zu tun ist:

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

Aber wenn Sie gerade erst anfangen, würde ich empfehlen die Sammlung Schlüssel-Pfad Betreiber zu vermeiden und gehen für den einfacheren Weg:

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

Herrje, ich wusste nicht, über '@ sum.self', wow, ich jeden Tag erinnere mich an, wie viel ich weiß nicht. –

+0

Interessanterweise gibt es solche Schlüssel auch wie "max.self", "min.self" ... Tolle Lösung .. – Ankit

0

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

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

Diese in ähnlicher Weise arbeiten sollte es Objective-C Pendant ist.

+1

Ich weiß, dass Sie es als ein Beispiel für die Verwendung von Schlüsselpfaden tun, aber für alle neueren Swift-Leser, Sie könnte stattdessen eine Reduzierung verwenden wollen! 'let sum = numArray.reduce (0) {$ 0 + $ 1}' –

+1

@MikeSprague: Ich stimme dir nicht zu, was vielleicht passender wäre, obwohl ich daran interessiert bin, warum eine alternative Methode nicht t präsentiert werden. Der Grund, warum ich diese Methode mag, ist, dass sie für die Menge des betroffenen Codes ziemlich gut für ein Array funktioniert, das gemischte Ganzzahlen und String-Werte enthält. –

0

In Swift 4:

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