Ich habe bisher einen einfachen (aber möglicherweise teuren) Weg:
var myMax = sort(myArray,>)[0]
Und wie mir das in der Schule beigebracht wurde:
var myMax = 0
for i in 0..myArray.count {
if (myArray[i] > myMax){myMax = myArray[i]}
}
Gibt es eine bessere Möglichkeit, den Maximalwert aus einem ganzzahligen Array in Swift zu erhalten? Idealerweise etwas, das eine Zeile ist, wie Ruby's.max
maxElement(myArray)
. Sehen Sie unten die zweite Antwort (Rudolf Adamkovics).Antworten:
Gegeben:
Swift 3:
Swift 2:
quelle
Comparable
Objekten,NSDecimalNumber
funktioniert also zum Beispiel nicht.min()
und umbenannt wurdenmax()
.minElement
undmaxElement
inmin
und umbenanntmax
. siehe: github.com/apple/swift-evolution/blob/master/proposals/... ich Ihre Verwirrung verstehen, weil die freien Funktionenmin
undmax
auch noch existieren. Siehe zum Beispiel gist.github.com/lorentey/d679064cb29df4558534d619319a1d9eUpdate: Dies sollte wahrscheinlich die akzeptierte Antwort sein, seit
maxElement
sie in Swift erschienen ist.Benutze den Allmächtigen
reduce
:Ähnlich:
reduce
Nimmt einen ersten Wert, der der Anfangswert für eine interne Akkumulatorvariable ist, wendet dann die übergebene Funktion (hier anonym) auf den Akkumulator und jedes Element des Arrays nacheinander an und speichert den neuen Wert im Akkumulator. Der letzte Akkumulatorwert wird dann zurückgegeben.quelle
nums.reduce(Int.min, max)
damax
der Prototyp bereits mit dem Typ übereinstimmt, derreduce
erwartet wirdlet numMax = nums.reduce(Int.min, combine: max)
Mit Swift 5,
Array
wie auch andereSequence
Protokolle entsprechen Objekte (Dictionary
,Set
usw.), hat zwei Methoden aufgerufenmax()
undmax(by:)
dass die Rückkehr des maximale Element in der Sequenz oder ,nil
wenn die Sequenz leer ist .# 1. Mit
Array
dermax()
Methode vonWenn der Elementtyp in Ihrer Sequenz Konform
Comparable
Protokoll (kann es seinString
,Float
,Character
oder einer Ihrer benutzerdefinierten Klasse oder Struktur), werden Sie in der Lage zu nutzen ,max()
dass Folgendes Erklärung :Die folgenden Spielplatzcodes werden angezeigt
max()
:# 2. Mit
Array
dermax(by:)
Methode vonWenn der Elementtyp in Ihrer Sequenz nicht dem
Comparable
Protokoll entspricht, müssen Siemax(by:)
Folgendes mit der folgenden Deklaration verwenden :Die folgenden Spielplatzcodes werden angezeigt
max(by:)
:quelle
Die anderen Antworten sind alle richtig, aber vergessen Sie nicht, dass Sie auch Erfassungsoperatoren wie folgt verwenden können:
Sie können den Durchschnitt auch auf die gleiche Weise ermitteln:
Diese Syntax ist möglicherweise weniger klar als einige der anderen Lösungen, aber es ist interessant zu sehen, dass
-valueForKeyPath:
sie weiterhin verwendet werden kann :)quelle
Sie können verwenden mit
reduce
:quelle
quelle
var myMax = sort(myArray,>)[0]
Mit Swift 1.2 (und möglicherweise früher) müssen Sie jetzt Folgendes verwenden:
Für die Arbeit mit Doppelwerten habe ich ungefähr Folgendes verwendet:
quelle
let numMax = nums.reduce(-Double.infinity, combine: max)
. Die maximale Funktionssignatur entspricht der Signatur des Mähdreschers: Parameters.In Swift 2.0, den
minElement
undmaxElement
werdenSequenceType
Protokollmethoden, sollten Sie sie wie folgt aufrufen:Die Verwendung
maxElement
als Funktion wiemaxElement(a)
ist derzeit nicht verfügbar .Die Syntax von Swift ist im Fluss, daher kann ich dies nur in Xcode Version 7 Beta6 bestätigen .
Es kann in Zukunft geändert werden. Ich empfehle daher, das Dokument zu überprüfen, bevor Sie diese Methoden verwenden.
quelle
Swift 3.0
Sie können diesen Code programmgesteuert ausprobieren.
quelle
Hier ist ein Leistungstest für die hier veröffentlichten Lösungen. https://github.com/tedgonzalez/MaxElementInCollectionPerformance
Dies ist die schnellste für Swift 5
array.max()
quelle
Verwenden Sie die folgenden einfachen Codezeilen, um das Maximum aus dem Array zu ermitteln.
quelle
Sie können Ihr Array auch sortieren und dann
array.first
oder verwendenarray.last
quelle