Ну, вы могли бы сделать:
if(dict.Any())
print(dict.Values.Max());
Это не только более кратко, но и не требует сначала сортировки словаря неуместно (что делает начало перечисления в OrderByDescending
), поэтому оно более эффективно как во времени, так и в пространстве.
Если вам также нужен ключ, вы можете использовать оператор MaxBy
(например, от moreLinq ) следующим образом:
if(dict.Any())
{
var bestKvp = dict.MaxBy(kvp => kvp.Value);
Console.WriteLine("Key = {0}, Value = {1}", bestKvp.Key, bestKvp.Value);
}
Этого можно добиться стандартным LINQ to Objects за O(n)
время и O(1)
с помощью оператора Aggregate
, но это довольно уродливо:
if(dict.Any())
{
var bestKvp = dict.Aggregate((bestSoFar, next) => bestSoFar.Value > next.Value ? bestSoFar : next );
Console.WriteLine("Key = {0}, Value = {1}", bestKvp.Key, bestKvp.Value);
}