LINQ Select 从 collection 降序排列,三个不同的值上升到元素的最大值
LINQ Select in descending order from collection, three different values that go up to the maximum value of the element
例如我有一个这样的collection
var c1 = new Collection<int>{0,0,2,2,2,3,3,4,4,4,4,5,5,6,6,7};
我想得到这样的结果
(6,5,4)
你可以这样做:
c1.Distinct()
.OrderByDescending(x => x)
.Skip(1)
.Take(3)
.ToList()
先把重复的全部去掉,再进行沮丧排序。 Skip(1)
以便删除最大元素。最后你可以从剩下的元素中取出 3 个元素。
在过去,在 LINQ 出现之前,我们可能会像您那样对排序集合执行此操作:
var maxes = new int[4];
var idx = 0;
var max = 0;
foreach(var c in c1)
if(c > max)
max = maxes[(idx++)%4] = c;
最后,您将得到一个包含 4 个最大值的数组 - 3 个是您想要的,另一个是您不需要的(在 (idx - 1) % 4
中)。我不知道我现在是否会使用它,但它比“区分,然后排序,然后跳过然后采用”方法更有效,因为它在一次通过中完成工作
例如我有一个这样的collection
var c1 = new Collection<int>{0,0,2,2,2,3,3,4,4,4,4,5,5,6,6,7};
我想得到这样的结果
(6,5,4)
你可以这样做:
c1.Distinct()
.OrderByDescending(x => x)
.Skip(1)
.Take(3)
.ToList()
先把重复的全部去掉,再进行沮丧排序。 Skip(1)
以便删除最大元素。最后你可以从剩下的元素中取出 3 个元素。
在过去,在 LINQ 出现之前,我们可能会像您那样对排序集合执行此操作:
var maxes = new int[4];
var idx = 0;
var max = 0;
foreach(var c in c1)
if(c > max)
max = maxes[(idx++)%4] = c;
最后,您将得到一个包含 4 个最大值的数组 - 3 个是您想要的,另一个是您不需要的(在 (idx - 1) % 4
中)。我不知道我现在是否会使用它,但它比“区分,然后排序,然后跳过然后采用”方法更有效,因为它在一次通过中完成工作