Подтвердить что ты не робот

Имеет ли словарь <TKey, TValue> порядок по ключам по умолчанию?

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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