我有List<KeyValuePair<int, string>>
。
我希望能够了解最多KeyValuePair<int, string>
的{{1}}。
但是,我想获得密钥的价值。不仅是钥匙。
我能够做到这一点:
Key
但它返回键...而不是值:(
我该怎么做?
答案 0 :(得分:4)
最简单(但不必要的昂贵)的方式是:
var pair = myList.OrderByDescending(x => x.Key).First();
但是,编写一个定制MaxBy
扩展方法非常容易,该方法可以执行相同的工作,而无需对所有其他值进行排序。这是否重要取决于列表的大小和您的性能要求。
The MoreLINQ
library有a suitable MaxBy
method,允许:
var pair = myList.MaxBy(x => x.Key);
答案 1 :(得分:0)
您可以使用FirstOrDefault
或First
来KeyValuePair
选择您需要的Max
。
所以你可以像这样写代码:
var list = new List<KeyValuePair<int, string>>();
list.Add(new KeyValuePair<int, string>(1, "a"));
list.Add(new KeyValuePair<int, string>(5, "b"));
list.Add(new KeyValuePair<int, string>(3, "c"));
var value = list.FirstOrDefault(x => x.Key == list.Max(y => y.Key));
答案 2 :(得分:0)
为了完整性,在这种情况下另一种有效的方法是使用Aggregate
方法:
var item = myList.Aggregate((a, b) => a.Key < b.Key ? b : a);