我有一台List<KeyValuePair<int, string>>。我想知道拥有最大Key的KeyValuePair<int, string>。
但是,我想要获取密钥的值。不仅仅是钥匙。
我可以这样做:
int myValue = myListe.Max(t => t.Key);但它会将值返回给key...not :(
我该怎么做呢?
发布于 2016-06-17 18:00:57
最简单(但不必要地昂贵)的方法是:
var pair = myList.OrderByDescending(x => x.Key).First();然而,很容易编写一个定制的MaxBy扩展方法来完成相同的工作,而不需要对所有其他值进行排序。这是否重要取决于列表的大小和您的性能要求。
The MoreLINQ library有a suitable MaxBy method,这将允许:
var pair = myList.MaxBy(x => x.Key);发布于 2016-06-17 18:06:32
除了Max之外,您还可以使用FirstOrDefault或First来选择所需的KeyValuePair。
所以你可以这样写你的代码:
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));发布于 2016-06-17 19:05:48
为了完整性,这种情况下的另一种有效方法是使用Aggregate方法:
var item = myList.Aggregate((a, b) => a.Key < b.Key ? b : a);https://stackoverflow.com/questions/37878588
复制相似问题