Was ist der einfachste (beste) Weg, um die Summe eines Arrays von ganzen Zahlen schnell zu finden? Ich habe ein Array namens Multiples und möchte die Summe der Multiples wissen.
228
Dies ist die einfachste / kürzeste Methode, die ich finden kann.
Swift 3 und Swift 4:
let multiples = [...]
let sum = multiples.reduce(0, +)
print("Sum of Array is : ", sum)
Swift 2:
let multiples = [...]
sum = multiples.reduce(0, combine: +)
Noch ein paar Infos:
Hierbei wird die Reduktionsmethode von Array verwendet (Dokumentation hier ), mit der Sie "eine Sammlung von Elementen durch rekursives Anwenden des bereitgestellten Abschlusses auf einen einzigen Wert reduzieren können". Wir geben 0 als Anfangswert und dann im Wesentlichen den Abschluss { $0 + $1 }
. Natürlich können wir das zu einem einzigen Pluszeichen vereinfachen, denn so rollt Swift.
let totalSum = self.cheques.reduce(0) { $0 + $1.amount}
combine
. Sollte seinmultiples.reduce(0, combine: +)
.flatMap
Sie zuerst, ein darauf zu verwenden, um es auf ein Array mit einer einzigen Dimension zu reduzieren.multiArray.flatMap{$0}.reduce(0, combine: +)
Swift 3+ One Liner, um die Eigenschaften von Objekten zu summieren
Wo Punkte ist die Eigenschaft in meinem benutzerdefinierten Objekt scaleData , die ich reduzieren möchte
quelle
Swift3 hat sich geändert zu:
quelle
In Swift 4 können Sie die Sequenzelemente auch auf das numerische Protokoll beschränken, um die Summe aller Elemente in der Sequenz wie folgt zurückzugeben
bearbeiten / aktualisieren:
Xcode 10.2 • Swift 5 oder höher
Wir können die Sequenzelemente einfach auf das neue AdditiveArithmetic- Protokoll beschränken, um die Summe aller Elemente in der Auflistung zurückzugeben
Xcode 11 • Swift 5.1 oder höher
quelle
Das funktioniert auch:
Das Ergebnis ist: 55
quelle
Swift 4 Beispiel
quelle
Swift 3
Wenn Sie ein Array generischer Objekte haben und eine Objekteigenschaft summieren möchten, dann:
Trotz der kürzeren Form bevorzugen Sie oft den klassischen For-Cycle:
quelle
Wie wäre es mit dem einfachen Weg von
// wobei n = Anzahl der Elemente im Array
quelle
var sum = 0 ; for n in multiples { sum += n }
obwohl ich reduzieren würde.Eine mögliche Lösung: Definieren Sie einen Präfixoperator dafür. Wie der Reduzierungsoperator "+ /" wie in APL (zB GNU APL)
Ein etwas anderer Ansatz hier.
Die Verwendung eines generischen Protokolltyps ermöglicht es uns, diesen Operator für Double-, Float- und Int-Array-Typen zu verwenden
Verwenden Sie wie folgt:
(aktualisiert für Swift 2.2, getestet in Xcode Version 7.3)
quelle
Swift 3.0
Ich hatte das gleiche Problem, ich fand in der Dokumentation Apple diese Lösung.
Aber in meinem Fall hatte ich eine Liste von Objekten, dann musste ich meinen Wert meiner Liste transformieren:
diese Arbeit für mich.
quelle
hat diesen für verschachtelte Parameter verwendet
quelle
Halte es einfach...
Ausgabe:
quelle
Für mich war es so, wenn ich Eigentum benutzte
quelle
Swift 3
Von allen hier angezeigten Optionen hat diese für mich funktioniert.
quelle
Für die Summe der Elemente in einem Array von Objekten
quelle
Das ist mein Ansatz dazu. Ich glaube jedoch, dass die beste Lösung die Antwort des Benutzernamens tbd ist
quelle