Trier Swift gamme de Dictionnaires en Valeur d'une Clé
J'essaie de trier rapidement un tableau qui est composé de dictionnaires. J'ai préparé un exemple de travail ci-dessous. L'objectif est de trier l'ensemble de la matrice par le "d" de l'élément dans les dictionnaires. J'ai préparé le présent exemple de travail qui peut être placé dans un Swift projet:
var myArray = Array<AnyObject>()
var dict = Dictionary<String, AnyObject>()
dict["a"] = "hickory"
dict["b"] = "dickory"
dict["c"] = "dock"
dict["d"] = 5
myArray.append(dict)
dict["a"] = "three"
dict["b"] = "blind"
dict["c"] = "mice"
dict["d"] = 6
myArray.append(dict)
dict["a"] = "larry"
dict["b"] = "moe"
dict["c"] = "curly"
dict["d"] = 2
myArray.append(dict)
println(myArray[0])
println(myArray[1])
println(myArray[2])
}
Cette résultats dans la sortie suivante dans le journal:
{
a = hickory;
b = dickory;
c = dock;
d = 5;
}
{
a = three;
b = blind;
c = mice;
d = 6;
}
{
a = larry;
b = moe;
c = curly;
d = 2;
}
L'objectif est de trier le tableau par le "d" de l'élément, de sorte que la sortie serait changé à la suite (qui est basé sur l'ordre numérique, de "d": '2, 5, 6'):
{
a = larry;
b = moe;
c = curly;
d = 2;
}
{
a = hickory;
b = dickory;
c = dock;
d = 5;
}
{
a = three;
b = blind;
c = mice;
d = 6;
}
Il y a d'autres questions qui semblent similaires, mais quand vous les regardez, il devient clair qu'ils ne sont pas aborder cette. Je vous remercie pour votre aide.
OriginalL'auteur Jack Amoratis | 2015-05-25
Vous devez vous connecter pour publier un commentaire.
À déclarer, si vous avez besoin de le garder comme AnyObject, vous devez explicitement exprimés:
Sans ajouter, vous pouvez le faire comme ceci:
Qui vous donne le même résultat. Bien que, si seulement la valeur de l'objet dans le dictionnaire doit changer, vous n'avez pas besoin de jeter les éléments du tableau:
Puis, à trier, vous utilisez le sort() de fermeture, qui trie un Tableau en place. La fermeture, vous offre prend deux arguments (nommée 0 $et $1), et renvoie un Booléen. La fermeture doit retourner true si $0 est commandé avant $1, ou false si elle vient après. Pour ce faire, vous avez à jeter un sort terrible:
Oui, vous avez à changer les déclarations comme j'ai ci-dessus.
var myArray = Array<Dictionary<String, String>>() var dict = Dictionary<String, String>()
Merci de lire la réponse précédente qui j'ai mis à jour. L'erreur a disparu, mais le tri ne fonctionne pas. J'ai collé votre code directement dans XCode avec println(montableau[0]) println(montableau[1]) println(montableau[2]) et a obtenu: [b: dickory, un: hickory, c: station d'accueil] [b: à l'aveugle, un: trois, c: souris] [b: moe, larry, c: bouclé]
La dernière ligne devrait être
myArray.sort() {$0["c"] < $1["c"]}
ouvar newArray = sorted(myArray){$0["c"] < $1["c"]}
. Triés crée un nouveau tableau, tandis que le tri ne fonctionne pas.La dernière ligne est une instruction qui renvoie ce que j'ai mis dans le commentaire - je vais le modifier un peu pour le rendre plus clair.
OriginalL'auteur oisdk
ou
OriginalL'auteur Leo Dabus
Trie un Tableau de Dictionnaire Swift 3 & 4
OriginalL'auteur Barath
lorsque nous analyser les données, puis nous pouvons trier en utilisant NSSortDescriptor
OriginalL'auteur Amol Pokale