2009-02-25 6 views
11

J'utilise un Dictionary<TKey, TValue> et je reçois un comportement étrange, quoique quelque peu compréhensible dans mes tests.Le dictionnaire <TKey, TValue> est-il commandé par les clés par défaut?

Peu importe l'ordre j'ajoute des entrées au dictionnaire lorsque j'appelle Dictionary.Keys les clés sont retournées dans l'ordre spécifié par l'implémentation IComparable<T> pour le type de la clé.

Ceci est bon pour moi car je veux les obtenir dans cet ordre de toute façon, mais je ne trouve nulle part qui spécifie qu'ils devraient et seront toujours retournés de cette façon. Par conséquent, je ne sais pas s'il faut toujours compter sur cela ou faire un tri (potentiellement redondant) sur le List<T> que je construis.

Puis-je me fier à ce comportement ou non?

Répondre

24

Vous ne pouvez pas compter sur ce comportement. C'est juste une coïncidence qui est probablement due à votre taille d'échantillon ou à l'implémentation de GetHashCode. Une fois que vous ajoutez suffisamment d'éléments dans la table et que vous forcez les ressauts, les clés ne seront pas commandées.

MSDN dit explicitement l'ordre des clés est non spécifié (http://msdn.microsoft.com/en-us/library/yt2fy5zk.aspx)

16

Vous cherchez SortedDictionary<K,V>. Dictionnaire <K,V> utilise le hachage, qui, avec de petits ensembles peut sembler superficiellement similaire à trier.

Questions connexes