У меня есть словарь в C# как
Dictionary<Person, int>
и я хочу отсортировать тот словарь на месте относительно ключей (поле в классе Человек). Как я могу сделать это? Каждая доступная справка в Интернете является справкой списков без конкретного примера на месте сортировки Словаря. Любая справка высоко ценилась бы!
Вы не можете отсортировать Dictionary
- он изначально неупорядочен. (Или, скорее, порядок, в котором извлекаются записи, зависит от реализации. Вы не должны полагаться на то, что он работает одинаково между версиями, поскольку упорядочение не является частью его разработанной функциональности.)
Вы можете используйте SortedList
или SortedDictionary
, оба из которых сортируются по ключу (настраиваемым способом, если вы передаете IEqualityComparer
в конструктор) - могут ли они быть вам полезны?
Не обращайте внимания на слово «список» в имени SortedList
- это все еще словарь, в котором он сопоставляет ключи со значениями. Он реализован с использованием внутреннего списка, поэтому вместо поиска по хеш-коду выполняется двоичный поиск. SortedDictionary
аналогичным образом основан на двоичном поиске, но с использованием дерева вместо списка.
По умолчанию словари нельзя сортировать. Если вам нужна эта возможность в словаре, посмотрите вместо этого SortedDictionary.
Взгляните на SortedDictionary
, там даже перегрузка конструктора, чтобы вы могли передать свой собственный IComparable для сравнения.