W zamknięciu, do którego przejdziesz sort
, porównaj właściwości, według których chcesz sortować. Lubię to:
movieArr.sorted { $0.name < $1.name }
lub następujące w przypadkach, w których chcesz ominąć przypadki:
movieArr.sorted { $0.name.lowercased() < $1.name.lowercased() }
Uwaga dodatkowa: Zazwyczaj tylko typy rozpoczynają się wielką literą; Polecam używanie name
i date
, nie Name
i Date
.
Przykład na placu zabaw:
class Movie {
let name: String
var date: Int?
init(_ name: String) {
self.name = name
}
}
var movieA = Movie("A")
var movieB = Movie("B")
var movieC = Movie("C")
let movies = [movieB, movieC, movieA]
let sortedMovies = movies.sorted { $0.name < $1.name }
sortedMovies
sortedMovies
będzie w kolejności [movieA, movieB, movieC]
Aktualizacja Swift5
channelsArray = channelsArray.sorted { (channel1, channel2) -> Bool in
let channelName1 = channel1.name
let channelName2 = channel2.name
return (channelName1.localizedCaseInsensitiveCompare(channelName2) == .orderedAscending)
.lowercaseString
rozwiąże ten problem.sorted
znowu jest w Swift 3: D.Dzięki Swift 3 możesz wybrać jeden z następujących sposobów rozwiązania problemu.
1. Używanie
sorted(by:)
zMovie
klasą, która nie jest zgodna zComparable
protokołemJeśli twoja
Movie
klasa nie jest zgodna zComparable
protokołem, musisz określić w swoim zamknięciu właściwość, na której chcesz używaćsorted(by:)
metody Array .Movie
deklaracja klasy:Stosowanie:
2. Używanie
sorted(by:)
zMovie
klasą zgodną zComparable
protokołemJednak sprawiając, że
Movie
klasa jest zgodna zComparable
protokołem, możesz mieć bardzo zwięzły kod, gdy chcesz użyćsorted(by:)
metody Array .Movie
deklaracja klasy:Stosowanie:
3. Używanie
sorted()
zMovie
klasą, która jest zgodna zComparable
protokołemDostosowując
Movie
klasę doComparable
protokołu, możesz użyćsorted()
metody Array jako alternatywy dlasorted(by:)
.Movie
deklaracja klasy:Stosowanie:
źródło
movies.sorted(by: <)
imovies.sorted()
)?sorted(by:)
isorted()
są dwiema różnymi metodami. Możesz użyćarray.sorted()
jako alternatywy dlaarray.sorted(by: <)
.sorted(by:)
isorted()
?Comparable
protokołem."1" "14""28""31""4""42""49"
źródło
W przypadku użytkowników korzystających z języka Swift 3 równoważną metodą zaakceptowanej odpowiedzi jest:
źródło
Posortowana tablica Swift 4.2
źródło
źródło