2009-02-25 12 views
11

Używam Dictionary<TKey, TValue> i otrzymuję dziwne, choć nieco zrozumiałe zachowanie w moich testach.Czy słownik <TKey, TValue> jest domyślnie sortowany według kluczy?

Bez względu na kolejność dodawania wpisów do słownika po wywołaniu Dictionary.Keys klucze są zwracane w kolejności określonej przez implementację IComparable<T> dla typu klucza.

Jest to dobre dla mnie, ponieważ chcę je zdobyć w takiej kolejności, ale nie mogę znaleźć nigdzie, że określa, że ​​powinny one i zawsze będą zwrócone w ten sposób. Dlatego nie wiem, czy polegać na tym, że zawsze tak jest, czy robić (potencjalnie zbędny) sortowanie na List<T> buduję.

Czy mogę polegać na tym zachowaniu, czy nie?

Odpowiedz

24

Nie możesz polegać na tym zachowaniu. To tylko zbieg okoliczności, który prawdopodobnie wynika z rozmiaru próby lub implementacji GetHashCode. Po dodaniu wystarczającej ilości przedmiotów do stołu i wymuszeniu wystarczającej liczby rehashów klucze nie zostaną zamówione.

MSDN wyraźnie mówi kolejność Keys jest nieokreślona (http://msdn.microsoft.com/en-us/library/yt2fy5zk.aspx)

16

Szukacie SortedDictionary<K,V>. Słownik <K,V> wykorzystuje hashowania, który z małymi zestawami może wyglądać powierzchownie podobny do sortowania.

Powiązane problemy