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

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

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

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

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

Ответов (2)

Решение

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

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

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