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
}
Другие вопросы по тегам