2009-02-25 2 views
11

Ich verwende eine Dictionary<TKey, TValue> und ich bekomme ein seltsames, wenn auch etwas verständliches Verhalten in meinen Tests.Funktioniert Dictionary <TKey, TValue> standardmäßig mit den Schlüsseln?

Unabhängig von der Reihenfolge, die ich Einträge zum Wörterbuch hinzufügen, wenn ich Dictionary.Keys aufrufen, werden die Schlüssel in der Reihenfolge zurückgegeben, die von der IComparable<T> Implementierung für den Schlüsseltyp angegeben wird.

Das ist gut für mich, wie ich sie in dieser Reihenfolge sowieso bekommen will, aber ich kann nirgends finden, dass sie angeben, dass sie immer und immer wieder zurückgegeben werden sollen. Daher weiß ich nicht, ob ich darauf vertrauen soll, dass es immer so ist oder eine (potentiell redundante) Sortierung an der List<T> Ich baue.

Kann ich mich auf dieses Verhalten verlassen oder nicht?

Antwort

24

Sie können sich nicht auf dieses Verhalten verlassen. Dies ist nur ein Zufall, der wahrscheinlich auf Ihre Beispielgröße oder GetHashCode-Implementierung zurückzuführen ist. Sobald Sie genügend Elemente in die Tabelle eingefügt haben und genügend Wiederholungen erzwingen, werden die Schlüssel nicht sortiert.

MSDN sagt ausdrücklich, die Reihenfolge des Schlüssels nicht spezifiziert ist (http://msdn.microsoft.com/en-us/library/yt2fy5zk.aspx)

16

Sie suchen nach SortedDictionary<K,V> suchen. Wörterbuch <K,V> Hashing verwendet, die mit kleinen Mengen zu Sortierung oberflächlich ähnlich aussehen.

Verwandte Themen