c# - 使用linq Max()方法时如何获取 key

标签 c# linq

<分区>

我有一个 List<>其中包含几个字符串。例如{a1, a2, a15, a3, a16, a1} .我想获得最大数字 (a16) 的字符串。我尝试使用 Where() 和 Max() 但随后它将返回最大值 (16),我想在其中返回字符串 (a16)。 我想我可以用额外的 Where() 来做到这一点和 contains()但我想知道我是否可以用更简单的方式来做。

这是代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace linq_example
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> list = new List<string> {"b1", "a1", "a2","a9", "a16", "a1", "a5" , "b20"};
            var max = list.Where(i => i.IndexOf("a") != -1).Max(a => Convert.ToInt32(a.Substring(1)));
            Console.WriteLine(max.ToString());
            Console.ReadLine();
        }
    }
}

这个程序会在我想打印 a16 的地方打印 16

最佳答案

var biggest = list.OrderByDescending(x => Convert.ToInt32(a.Substring(1)).First();

请注意,LINQ OrderBy 是“延迟”求值的。它只会选择第一个元素,不会对列表进行完全排序。开销与 Max() 相当。这就是 LINQ 的美妙之处。

或者,您可以查看此链接:LINQ: How to perform .Max() on a property of all objects in a collection and return the object with maximum value

MoreLINQ 有 MaxBy() 可以让你轻松做到这一点。

关于c# - 使用linq Max()方法时如何获取 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20542890/

相关文章:

c# - 使用 Convert.ToDateTime 将字符串转换为 DateTime

c# - 从大 float 中删除 E 符号,C#?

c# - 180 天前的日期是几号?

c# - 如何使用 LINQ 按深度级别对对象层次结构进行排序?

c# - 使用缺失日期 LINQ 填充列表

c# - Linq to NHibernate 存储库实现细节

c# - 无法加载文件或程序集 'RestSharp,版本 = 105.2.3.0

c# - 暂停/恢复异步任务的模式?

c# - 我是否遗漏了有关 LINQ 的信息?

linq - 如何快速查找 List<T> 中的重复项,并更新原始集合