获取列表<keyvaluepair>上的最大KeyValuePair

时间:2016-06-17 09:58:01

标签: c# linq list max

我有List<KeyValuePair<int, string>>。 我希望能够了解最多KeyValuePair<int, string>的{​​{1}}。

但是,我想获得密钥的价值。不仅是钥匙。

我能够做到这一点:

Key

但它返回键...而不是值:(

我该怎么做?

3 个答案:

答案 0 :(得分:4)

最简单(但不必要的昂贵)的方式是:

var pair = myList.OrderByDescending(x => x.Key).First();

但是,编写一个定制MaxBy扩展方法非常容易,该方法可以执行相同的工作,而无需对所有其他值进行排序。这是否重要取决于列表的大小和您的性能要求。

The MoreLINQ librarya suitable MaxBy method,允许:

var pair = myList.MaxBy(x => x.Key);

答案 1 :(得分:0)

您可以使用FirstOrDefaultFirstKeyValuePair选择您需要的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);