c# - 如何使用 LINQ 从具有重复项的列表中获取第 N 个最大元素?

标签 c# linq

我在各种 StackOverflow 答案中看到,我可以通过执行类似

的操作来获得列表中第 N 个最大的元素
var nthFromTop = items.OrderByDescending().Skip(N-1).First();

但是如果列表中没有重复项,这不是才有效吗?如果列表包含重复项,是否有办法使用 LINQ 获取第 N 个最大元素(或元素集)?如果没有,在 C# 中执行此操作的最有效方法是什么?

最佳答案

如果要获取所有元素的集合,使用GroupBy

 var items = new[] {1, 1, 2, 2, 3, 4, 4};
 var thirdLargest = items
   .GroupBy(x => x)
   .OrderByDescending(group => group.Key)
   .ElementAt(2);

关于c# - 如何使用 LINQ 从具有重复项的列表中获取第 N 个最大元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24455950/

相关文章:

c# - 尝试读取结果集时遇到 fatal error

c# - 在集合中添加增量索引号

c# - 静态方法的空指针错误

c# - 访问修改后的闭包警告是否对字符串变量有效?

c# - 在 Travis CI 上使用 Mono 5.14.0.177、msbuild 15.0、nuget 4.7.1 构建失败,但在 VirtualBox 中无法重现

c# - 环绕面板上的 WPF 滚动条变灰

C# 表达式使用 Guid 书签

c# - Linq:IEnumerable 上的扩展方法,可在执行选择时自动执行空值检查

asp.net-mvc - 为什么 "linq to sql classes"在创建类时会更改表的名称?

c# - 在 LINQ 中不相等?