Geo*_*sen 4 .net c# linq dictionary sorted
首先,看看这段代码:
Dictionary<int,int> dict = Dictionary<int,int>();
dict[3] = 1;
dict[2] = 2;
dict[1] = 3;
foreach(KeyValuePair<int,int> item in dict.OrderByDescending(p => p.Value))
{
print(item.Value);
break;
}
Run Code Online (Sandbox Code Playgroud)
此代码基本上打印具有最高值的字典中的条目的值.我想在不使用"破坏" foreach
循环的情况下完成此操作.我怎么能这样做?
Ani*_*Ani 10
好吧,你可以这样做:
if(dict.Any())
print(dict.Values.Max());
Run Code Online (Sandbox Code Playgroud)
这不仅更简洁,而且不需要首先对字典进行排序(这是启动枚举的原因OrderByDescending
),因此在时间和空间上都更有效.
如果您还需要密钥,则可以使用MaxBy
运算符(例如来自moreLinq),如下所示:
if(dict.Any())
{
var bestKvp = dict.MaxBy(kvp => kvp.Value);
Console.WriteLine("Key = {0}, Value = {1}", bestKvp.Key, bestKvp.Value);
}
Run Code Online (Sandbox Code Playgroud)
可以通过操作员在O(n)
时间和O(1)
空间上使用标准LINQ to Objects来实现这一点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);
}
Run Code Online (Sandbox Code Playgroud)