C# Перебор словаря, отсортированного по значению
Есть ли способ перебора словаря, в отсортированном порядке, отсортированные по VALUE, а не по ключу? Я прочитал об объекте "SortedDictionary", но, к сожалению, он отсортирован по ключу. Одним из решений было бы для меня перевернуть все мои ключи с моими значениями и поместить их в SortedDictionary (так как все они являются целыми числами) - однако, я не совсем уверен, как поступить с этим тоже.
3 ответа
Получите пары ключей / значений, отсортируйте их и выполните итерации. Очень легко с помощью LINQ:
foreach(var pair in dictionary.OrderBy(p => p.Value)) {
// work with pair.Key and pair.Value
}
Для завершения предложенный выше код (dictionary.OrderBy(p => p.Value)) "не будет" работать для пользовательских типов.
OrderBy использует IComparable, чтобы иметь возможность сравнивать два объекта. Если значение в вашем словаре является пользовательским типом, тогда он должен реализовывать IComparable, чтобы иметь возможность правильно сортировать значения.
Читайте здесь.
// сортируем словарь по значению
foreach (KeyValuePair<datatype, datatype> item in dictionary)
{
//do something by value....accessing item.value
}