使用linq的字典中的最小值
我有一本打字词典使用linq的字典中的最小值,linq,dictionary,lambda,Linq,Dictionary,Lambda,我有一本打字词典 Dictionary<DateTime,double> dictionary 字典 如何使用linq从此字典中检索与此值相关的最小值和键 var min = dictionary.OrderBy(kvp => kvp.Value).First(); var minKey = min.Key; var minValue = min.Value; 但这不是很有效;您可能需要考虑 MyBi< /Cord>扩展方法。 如果你经常执行这个查询,你可能需要考虑一个不
Dictionary<DateTime,double> dictionary
字典
如何使用linq从此字典中检索与此值相关的最小值和键
var min = dictionary.OrderBy(kvp => kvp.Value).First();
var minKey = min.Key;
var minValue = min.Value;
但这不是很有效;您可能需要考虑<代码> MyBi< /Cord>扩展方法。
如果你经常执行这个查询,你可能需要考虑一个不同的数据结构。
在正常的LINQ中,你不能很容易地做到这一点——你可以很容易地得到最小值,但是找到这个键需要另一个扫描。如果你负担得起,就用Jess的答案 Dictionary<DateTime, double> dictionary;
//...
double min = dictionary.Min(x => x.Value);
var minMatchingKVPs = dictionary.Where(x => x.Value == min);
但是,您可能想看看MinBy
,在其中您可以编写:
var pair = dictionary.MinBy(x => x.Value);
只需进行一次扫描,就可以得到包含键和值的对
编辑:正如Nappy所说,MinBy
也在系统中。在中交互。聚合
var minPair=dictionary.Aggregate((p1,p2)=>(p1.Value
使用强大的Aggregate
方法
我知道在这种情况下,
MinBy
更干净,但是使用Aggregate
您可以获得更强大的功能和内置功能 @Jess:Read问题:“最小值和该值对应的键”@Jess:yes。他确实用单数形式说了“key”。我觉得这个答案比使用聚合方法时给出的代码可读性更强。单行版本的效率为O(n^2)-它会在字典中找到每一对的最小值。从未见过更多的LINQ。。。看起来很整洁。MinBy
也是System.Interactive.dll的一部分,可能与
var pair = dictionary.MinBy(x => x.Value);
var minPair = dictionary.Aggregate((p1, p2) => (p1.Value < p2.Value) ? p1 : p2);