Sont des clés et des valeurs dans un NSDictionary commandé?
Je veux dire: Est-ce l'ordre des clés et des valeurs dans un NSDictionary, toujours la même, comme la façon dont ils ont été spécifiés lors de l'initialisation de la NSDictionary? Ou devrais-je mieux de maintenir une salle de NSArray si j'ai vraiment besoin de savoir l'ordre de clés?
OriginalL'auteur | 2009-08-18
Vous devez vous connecter pour publier un commentaire.
Non, elles ne sont pas ordonnées. Tant que vous n'avez pas d'ajouter ou de supprimer des éléments à partir du dictionnaire, ils restent dans le même ordre, mais dès que vous ajoutez ou supprimez un élément, le nouvel ordre sera complètement différente.
Si vous avez besoin de clés/valeurs à être commandés, l'utilisation d'un NSArray (ou certains autres commandés structure de données) à la place.
NSDictionary
la documentation ne fait aucune promesse ou garantie au sujet de l'ordre -- il dit seulement qu'il fournit une interface de programmation à objets qui gèrent immuable associations des clés et des valeurs". Les docs pour la-allKeys
et-allValues
messages faire appel de la commande retournée par ces méthodes n'est pas défini, mais il ne serait probablement pas une mauvaise idée de la mettre plus explicite pour d'autres façons de dénombrer le dictionnaire des éléments.OriginalL'auteur Adam Rosenfield
NSDictionary touches & les valeurs ne sont pas commandés. Vos options:
OriginalL'auteur Mike Abdullah
Matt Gallagher a écrit un post de blog intitulé “OrderedDictionary: sous-classement d'un Cacao de classe cluster” couvrant exactement ce problème, complète avec des exemples de code.
OriginalL'auteur Saqib Saud
NSDictionary, selon Apple référence, est en fait un wrapper autour d'une table de hachage. Donc non, ils ne sont pas garantis pour être dans un ordre particulier.
Demandez-vous ce qu'est une table de hachage ressemble à une structure de données? Wiki a une assez bonne explination: en.wikipedia.org/wiki/Hash_table Si vous voulez savoir comment en particulier, Apple met en œuvre et d'y accéder, j'ai peur que les seules choses disponibles pour nous, ce sont les fichiers d'en-tête 😉
alors, quand je reçois ce droit, d'une table de hachage est presque tous sur une fonction de hachage qui permettra de calculer le bon tableau de l'index pour une chaîne donnée-clé + la taille de la matrice. Semble difficile à mettre en oeuvre, mais bon pour les performances. Si c'est vrai, il ne serait pas beaucoup d'importance combien d'articles sont ajoutés à un dictionnaire.
OriginalL'auteur Josh Lindsey
clés ne sont jamais garantis d'être dans le même ordre lors de l'accès à un NSDictionary. Si les touches peuvent être comparées (qui, je suppose qu'ils peuvent être donnés à votre question), alors vous pouvez toujours les trier si vous avez besoin d'accéder dans l'ordre de tri.
Vous aurez besoin de faire cela en lisant les clés dans un tableau de la première et de tri de l'éventail des cours.
OriginalL'auteur ennuikiller
En fait, on ne peut même pas compter sur l'ordre d'être la même lors de l'exécution du programme dans les deux périphériques différents, même si c'est le même programme et la même version exacte du système d'exploitation.
Par exemple, si vous exécutez le programme sur un iPad Air, l'ordre des éléments à l'intérieur NSDictionary peut être différent lorsqu'il exécute le même programme sur un iPad Retina, même si la version iOS est exactement le même.
En bref, l'ordre des éléments dans NSDictionary ne doit jamais être invoqué. Vous devez toujours supposer qu'ils peuvent être dans n'importe quel ordre non spécifié, qui peut être différent sur différents appareils.
OriginalL'auteur Warp