2 votes

Créer un tableau dont les clés proviennent du dict et dont les valeurs sont triées par le dict.

J'ai un dictionnaire que je veux itérer dans une tableview. Une façon de le faire est de créer un tableau avec toutes les clés et de récupérer la clé à l'index donné. Mais pour ce tableau, je veux que les clés soient classées par ordre alphabétique des valeurs du dictionnaire. Comment faire ?

static let dict = [
            "0P0000KBNA": "Länsförsäkringar Europa Indexnära",
            "0P0000YVZ3": "Länsförsäkringar Global Indexnära",
            "0P0000J1JM": "Länsförsäkringar Sverige Indexnära",
            "0P00013668": "Länsförsäkringar Tillväxtmarknad Indexnära A",
            "0P0000K9E7": "Länsförsäkringar USA Indexnära",
            "0P00005U1J": "Avanza Zero"
        ]

        static let sortedKeys = Array(dict.keys) // How?

3voto

Leo Dabus Points 122890

Il vous suffit de trier votre dictionnaire par valeur et de mapper la clé

let sortedKeys = dict.sorted{$0.value < $1.value}.map{$0.key}   // ["0P00005U1J", "0P0000KBNA", "0P0000YVZ3", "0P0000J1JM", "0P00013668", "0P0000K9E7"]

3voto

dfri Points 11222

En tant que variante mineure de @LeoDabus answer vous pouvez accéder au keys de votre dictionnaire et de trier ce tableau en fonction de la propriété value pour chaque clé

let sortedKeys = dict.keys.sorted { dict[$0]! < dict[$1]! }
print(sortedKeys)
/* ["0P00005U1J", 
    "0P0000KBNA", 
    "0P0000YVZ3",
    "0P0000J1JM",
    "0P00013668", 
    "0P0000K9E7"] */

Notez également que l'opérateur de déballage forcé ! est généralement à éviter, mais dans ce cas particulier, nous savons que les deux arguments abrégés $0 y $1 dans la fermeture du prédicat fournie à sorted(...) sont garanties d'être des clés valides dans le dictionnaire (puisque votre dictionnaire est immuable : donc pas de risques d'asynchronisme ici).

0voto

Tout d'abord, créez un nouveau tableau de chaînes appelé keysArray.

Deuxièmement, passez en revue votre tableau de dictionnaires et ajoutez toutes les clés au tableau nouvellement créé.

Maintenant, keysArray doit être un tableau de clés.

Troisièmement, trier le sortedKeysArray comme suit

var sortedArray = sortedKeysArray.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending}

Nous disposons à présent d'un tableau contenant les clés triées.

Ensuite, si vous avez besoin d'un tableau de dictionnaires, créez un nouveau tableau appelé sortedDictArray. Bouclez ensuite sur le tableau sortedKeysArray que nous avons créé précédemment, récupérez le dictionnaire par clé et ajoutez-le au tableau sortedDictArray. Et voilà !

J'espère que cela vous aidera !

0voto

Mobile Dan Points 11

Dictionnaire ordonné

J'ai utilisé le logiciel libre Dictionnaire ordonné créé par Lukas Kubanek pour résoudre ce genre de problèmes.

Pour l'utilisation de cette bibliothèque, vous pouvez vous référer à la section exemple d'aire de jeux .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X