Swift tri un tableau d'objets en fonction de la valeur booléenne
Je suis à la recherche d'un moyen de trier rapidement un tableau basé sur une valeur Booléenne.
J'ai eu de travail à l'aide d'un plâtre pour NSArray:
var boolSort = NSSortDescriptor(key: "selected", ascending: false)
var array = NSArray(array: results)
return array.sortedArrayUsingDescriptors([boolSort]) as! [VDLProfile]
Mais je suis à la recherche pour la Swift variante, des idées?
Mise à jour
Grâce à Arkku, j'ai réussi à corriger cela en utilisant le code suivant:
return results.sorted({ (leftProfile, rightProfile) -> Bool in
return leftProfile.selected == true && rightProfile.selected != true
})
- re. mise à jour en question, en comparant les booléens avec
true
est inutiles, et il serait mieux Swift style d'omettre le()
autour de la fermeture (comme cela est autorisé lorsque la fermeture est le dernier argument).
Vous devez vous connecter pour publier un commentaire.
De Swift, les tableaux peuvent être triés en place avec
sort
ou à un nouveau tableau avecsorted
. Le seul paramètre de la fonction est une clôture en prenant deux éléments et le retourtrue
ssi le premier est commandé avant le second. Le chemin le plus court pour utiliser la fermeture de paramètres est en se référant à eux comme$0
et$1
.Par exemple (pour trier le vrai booléens première):
(edit: mis à Jour pour Swift 3 et 4, précédemment
sort
étaitsortInPlace
etsorted
étaitsort
.)Nouvelle (pour Swift 1.2)
Vieux (pour Swift 1.0)
En supposant
results
est de type[VDLProfile]
et VDLProfile a unBool
membreselected
:Voir la documentation de triés
De Swift, la bibliothèque standard fournit une fonction appelée triés, qui trie un tableau de valeurs d'un type connu, basé sur la sortie d'un tri de fermeture que vous fournissez
reversed
sera un nouveau tableau qui seront triées en fonction de la condition de la fermeture.