2017-03-12 3 views
0

Ich versuche ein String Array mit Zahlen zu sortieren, aber ich bekomme nicht die richtige Reihenfolge.Sortiere mehr als 10 Nummern in Swift3

print(alleTouren) // ["1", "3", "2", "5", "15", "4"] 

alleTouren = alleTouren.sorted(by: {$0 < $1})        

print(alleTouren) // ["1", "15", "2", "3", "4", "5"] 

Ich habe auch versucht alleTouren.sort (von: <) und alleTouren.sort() aber ich immer die 15 zu früh zurück. Was mache ich falsch?

+0

Sie erhalten die richtige Reihenfolge: Die Strings sind korrekt lexikographisch sortiert. Wenn Sie Integer-Sortierung wünschen, müssen Sie sie zuerst konvertieren. – Alexander

Antwort

0

Da alle Strings Int fügen Sie die Umstellung auf die Schließung umgewandelt werden kann.

var alleTouren = ["1", "3", "2", "5", "15", "4"] 
alleTouren = alleTouren.sorted(by: { Int($0)! < Int($1)! }) 

Alternativ die compare Funktion von String mit numeric Option verwenden, die wahrscheinlich effizienter ist.

alleTouren = alleTouren.sorted(by: { $0.compare($1, options:.numeric) == .orderedAscending}) 
+0

Ich bin gespannt wie dies mit 'alleTouren.flatMap (Int.init) .sorted.flatMap (String.init)' für die Leistung – Alexander

+0

Vielen Dank! – Squirrel

0

Das Problem ist, dass Sie scheinen zu sagen, dass Sie sie sortieren möchten, als ob sie Zahlen sind, aber sie sind Strings, also "1", "15", "2" ... ist richtig. Sie könnten versuchen, $ 0 und $ 1 in Ganzzahlen umzuwandeln und diese zu vergleichen.

Ich bin kein Experte Swift, aber dies scheint zu funktionieren:

alleTouren = alleTouren.sorted{let s0 = Int($0) 
let s1 = Int($1) 
return s0! < s1!} 
+0

Danke für die Antwort, ich habe es nicht getestet, weil die erste Antwort schon seinen Job gemacht hat und einfacher für mich aussieht. – Squirrel

Verwandte Themen