Dans la fermeture à laquelle vous passez sort
, comparez les propriétés par lesquelles vous souhaitez trier. Comme ça:
movieArr.sorted { $0.name < $1.name }
ou ce qui suit dans les cas que vous souhaitez contourner:
movieArr.sorted { $0.name.lowercased() < $1.name.lowercased() }
Note de bas de page: En général, seuls les types commencent par une lettre majuscule; Je recommanderais d'utiliser name
et date
, pas Name
et Date
.
Exemple, dans une aire de jeux:
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
sera dans l'ordre [movieA, movieB, movieC]
Mise à jour Swift5
channelsArray = channelsArray.sorted { (channel1, channel2) -> Bool in
let channelName1 = channel1.name
let channelName2 = channel2.name
return (channelName1.localizedCaseInsensitiveCompare(channelName2) == .orderedAscending)
.lowercaseString
résoudra ce problème.sorted
à nouveau dans Swift 3: D.Avec Swift 3, vous pouvez choisir l'une des méthodes suivantes pour résoudre votre problème.
1. Utilisation
sorted(by:)
avec uneMovie
classe non conforme auComparable
protocoleSi votre
Movie
classe n'est pas conforme auComparable
protocole, vous devez spécifier dans votre clôture la propriété sur laquelle vous souhaitez utiliser lasorted(by:)
méthode d'Array .Movie
déclaration de classe:Usage:
2. Utilisation
sorted(by:)
avec uneMovie
classe conforme auComparable
protocoleCependant, en rendant votre
Movie
classe conforme auComparable
protocole, vous pouvez avoir un code beaucoup plus concis lorsque vous souhaitez utiliser lasorted(by:)
méthode d'Array .Movie
déclaration de classe:Usage:
3. Utilisation
sorted()
avec uneMovie
classe conforme auComparable
protocoleEn rendant votre
Movie
classe conforme auComparable
protocole, vous pouvez utiliser lasorted()
méthode d'Array comme alternative àsorted(by:)
.Movie
déclaration de classe:Usage:
la source
movies.sorted(by: <)
etmovies.sorted()
)?sorted(by:)
etsorted()
sont deux méthodes différentes. Vous pouvez utiliserarray.sorted()
comme alternative pourarray.sorted(by: <)
.sorted(by:)
etsorted()
?Comparable
protocole."1" "14""28""31""4""42""49"
la source
Pour ceux qui utilisent Swift 3, la méthode équivalente pour la réponse acceptée est:
la source
Tableau trié Swift 4.2
la source
la source