2015-11-14 45 views
5

Kiedy mówię o kolejności - mam na myśli kolejność, którą kompilator wybiera do wyświetlania wyników, wiem, że słownik nie ma indeksu takiego jak tablica.Swift - co decyduje o kolejności kolekcji słowników?

Mam następujący słownik:

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

Ale konsola pokazuje on wyświetlany tak:

[ "Privacy" ( "Ustaw hasło" ), "Tabs Load" : ( "Przeładuj karty po wybraniu zakładki" ), "Dane": ( Zapisz, Przywróć ), "O mnie": ( Twitter, LinkedIn )]

Jak widać kolejność jest inna, ale kiedy zmienić kolejność kodu słowniku wyjście jest nadal taka sama.

Czy ktoś mógłby mi to wyjaśnić, więc lepiej rozumiem, jak to osiągnąć? Nie próbuję manipulować słownikiem, ale próbuję zrozumieć, jak określa się wynik.

Jeśli klucze nie mają ustalonej kolejności, nie powinny być wyświetlane losowo za każdym razem, gdy słownik podaje wynik?

Odpowiedz

8

Dictionary s działają na Hashable kluczy i są realizowane przy użyciu hash table, często stosowanym sposobem reprezentowania tablic asocjacyjnych z O(1) odnośnika. Tabele skrótu są zwykle sortowane według wartości całkowitej kodu skrótu dla niewielkiej liczby par klucz-wartość (poniżej progu kubełkowego), a następnie w kolejności odwrotnego wstawiania. Oznacza to, że w większości przypadków nie można liczyć na to, że tabele haszów będą sortowane w rozsądnej lub przewidywalnej kolejności.