Другие ответы хороши, если все, что вам нужно, это иметь «временный» список, отсортированный по значению. Однако, если вы хотите, чтобы словарь был отсортирован по Key
, который автоматически синхронизирует с другим словарем, отсортированным по Value
, вы можете использовать Bijection<K1, K2>
класс .
Bijection<K1, K2>
позволяет инициализировать коллекцию с двумя существующими словарями, поэтому, если вы хотите, чтобы один из них не был отсортирован, а другой сортировался, вы можете создать свою биекцию с кодом, подобным
var dict = new Bijection<Key, Value>(new Dictionary<Key,Value>(),
new SortedDictionary<Value,Key>());
Вы можете использовать dict
как любой обычный словарь (он реализует IDictionary<K, V>
), а затем вызвать dict.Inverse
, чтобы получить «обратный» словарь, который отсортирован по Value
.
Bijection<K1, K2>
является частью Loyc.Collections.dll , но при желании вы можете просто скопировать исходный код в свой собственный проект.
Примечание : если несколько ключей с одинаковым значением, вы не можете использовать Bijection
, но вы можете вручную синхронизировать между обычными Dictionary<Key,Value>
и BMultiMap<Value,Key>
.