Wie lautet die Reihenfolge von Dictionary.Values.ToArray ()?

8

Wenn ich einem Wörterbuch Werte hinzufüge und später irgendwo im Code, möchte ich dieses Wörterbuch in ein Array konvertieren mit:

%Vor%

Wird das Array in der Reihenfolge ausgegeben, in der ich es eingegeben habe? Oder ist es irgendwann sortiert?

    
Randomman159 28.05.2011, 10:34
quelle

3 Antworten

11

Wenn die Werte sortiert werden sollen (auf dem Key), dann sollten Sie ein SortedDictionary<K,V> oder ein SortedList<K,V>

verwenden

Bei einem normalen Wörterbuch ist die Reihenfolge der Werte von der Implementierung abhängig, aber Sie können davon ausgehen, dass es zufällig ist.

Die Reihenfolge der Eingabe ist verloren.

    
Henk Holterman 28.05.2011, 11:08
quelle
9

Die Reihenfolge, in der die Werte zurückgegeben werden, ist wahrscheinlich (aber nicht garantiert) dieselbe Reihenfolge, in der die Schlüssel gespeichert werden. Wie von Henk Holterman erwähnt, ist dies umsetzungsspezifisch und sollte nicht verlässlich sein.

MSDN-Eintrag für Dictionary ist sehr explizit:

  

Zu Zwecken der Aufzählung, jedes Element   im Wörterbuch wird wie a behandelt   KeyValuePair Struktur   einen Wert und seinen Schlüssel darstellen. Das   Reihenfolge, in der die Artikel zurückgegeben werden   ist undefiniert.

BEARBEITEN Dictionary kann Sie in ein falsches Sicherheitsgefühl locken, indem Sie scheinbar Werte in der Reihenfolge zurückgeben, in der sie hinzugefügt wurden. Der Test zeigt jedoch, dass sein Verhalten wesentlich subtiler ist:

%Vor%

Wenn Sie sich den Code genau ansehen, sehen Sie, dass die Reihenfolge der Elemente im Dictionary nicht die Reihenfolge ist, in der Elemente hinzugefügt werden, sondern die Reihenfolge, in der Elemente ursprünglich hinzugefügt werden .

Ich möchte nicht vorstellen, was mit mehreren Einfügungen und Löschungen im Laufe der Zeit passiert. Wenn Sie sich auf dieses undokumentierte Verhalten verlassen, werden Sie der Welt ein Äquivalent von US-Staatsschulden in Form von schlechtem Code-Offsets schulden . p>     

Igor Zevaka 28.05.2011 11:20
quelle
1

Wenn myDictionary vom Typ Dictionary<K,V> ist, ist die Reihenfolge identisch mit der Reihenfolge, die von Keys verwendet wird und ansonsten undefiniert. Insbesondere wird nicht garantiert, dass es sich um den Anzeigenauftrag handelt, oder um irgendeine sinnvolle Bestellung oder sogar darum, dass es sich um die gleiche Bestellung in verschiedenen Durchläufen derselben Anwendung handelt.

  

Die Reihenfolge der Werte in der Dictionary.ValueCollection ist nicht angegeben, aber sie hat dieselbe Reihenfolge wie die zugeordneten Schlüssel in Dictionary.KeyCollection, die von der Keys-Eigenschaft zurückgegeben wird.

Ссылка

    
CodesInChaos 28.05.2011 12:06
quelle

Tags und Links