Словарь <TKey, TValue> упорядочен по клавишам по умолчанию? - PullRequest
11 голосов
/ 25 февраля 2009

Я использую Dictionary<TKey, TValue> и получаю странное, хотя и несколько понятное поведение в моих тестах.

Независимо от порядка добавления записей в словарь при вызове Dictionary.Keys ключи возвращаются в порядке, указанном реализацией IComparable<T> для типа ключа.

Это хорошо для меня, так как я все равно хочу привести их в таком порядке, но я не могу найти нигде, где указано, что они должны и всегда будут возвращены таким образом. Поэтому я не знаю, стоит ли полагаться на то, что он всегда такой или выполняет (потенциально избыточную) сортировку в List<T>, который я строю.

Можно ли положиться на это поведение или нет?

Ответы [ 2 ]

24 голосов
/ 25 февраля 2009

Вы не можете полагаться на это поведение. Это просто совпадение, которое, вероятно, связано с размером выборки или реализацией GetHashCode. После того, как вы добавите достаточно предметов в таблицу и проведете достаточное количество перефразировок, ключи не будут заказаны.

MSDN прямо говорит, что порядок ключей не указан (http://msdn.microsoft.com/en-us/library/yt2fy5zk.aspx)

16 голосов
/ 25 февраля 2009

Вы ищете SortedDictionary <K,V>. Словарь <K,V> использует хеширование, которое при небольших наборах может выглядеть внешне похоже на сортировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...