2015-11-14 4 views
5

Wenn ich Reihenfolge sage - ich meine die Reihenfolge, die der Compiler wählt, um die Ergebnisse anzuzeigen, weiß ich, dass ein Wörterbuch keinen Index wie ein Array hat.Swift - Was bestimmt die Reihenfolge einer Dictionary Collection?

Ich habe folgendes Wörterbuch:

let groups :Dictionary<String,AnyObject> = [ 
"Data": ["Save", "Restore"], 
"Load Tabs": ["Reload Tabs when selecting tab"], 
"Privacy": ["Set Passcode"], 
"About Me": ["Twitter", "LinkedIn"]] 

Aber die Konsole zeigt es wie folgt angezeigt:

[ "Privacy": ( "Set Passcode" ), "Load Tabs" : ( "Reload Tabs bei Auswahl der Registerkarte" ), "Data": ( speichern, Restore), "Über mich": ( Twitter, LinkedIn )]

Wie Sie die sehen können, ist anders, aber wenn ich die Reihenfolge des Wörterbuchs Code ändern die Ausgabe ist immer noch die gleichen.

Könnte jemand das bitte für mich klären, damit ich besser verstehe, wie das erreicht wird? Ich versuche nicht, das Wörterbuch zu manipulieren, sondern zu versuchen zu verstehen, wie die Ausgabe bestimmt wird.

Wenn Schlüssel keine festgelegte Reihenfolge haben, sollte es nicht jedes Mal zufällig erscheinen, wenn das Wörterbuch eine Ausgabe gibt?

Antwort

8

Dictionary s arbeiten auf Hashable Schlüssel und werden unter Verwendung eines hash table implementiert, eine häufig verwendete Wege-Assoziativ-Arrays mit O(1) lookup darzustellen. Hash-Tabellen werden normalerweise nach dem Integer-Wert des Hash-Codes für kleine Zahlen von Schlüssel-Wert-Paaren (unterhalb des Bucket-Schwellenwerts) und danach in umgekehrter Reihenfolge sortiert. Dies bedeutet, dass Sie sich nicht darauf verlassen können, dass Hash-Tabellen in den meisten Fällen in einer vernünftigen oder vorhersagbaren Reihenfolge sortiert werden.

Verwandte Themen