查找集合中一组项的最后一项

本文关键字:一项 最后 集合 查找 一组 | 更新日期: 2023-09-27 18:31:08

我有一个项目集合,所有项目都有一个键和一个"序列"号。 我正在尝试查找每个键具有"最后一个"序列号的项目......但是序列号在"窗口"内(因为它们是基于日期的)。

示例数据

Key     Seq     other data.....
___     ___     _________________
ABC     4       
ABC     5
ABC     6
FGH     1
FGH     2
FGH     3
FGH     4
FGH     5
FGH     6
FGH     7
FGH     8
FGH     9
FGH     10
OPQ     6
RST     3
RST     4

我会寻找结果:

ACB     6
FGH     10
OPQ     6
RST     4

我可以通过逐个循环遍历每个键来获得这一点,但似乎必须有一种更干净的方法。

查找集合中一组项的最后一项

项目是否保证在原始数据中排序?

如果是这样,那么您可以这样做:

var result = items.GroupBy(item => item.Key).Select(group => group.Last());

如果它们最初可能乱序,那么这将起作用:

var result = items.GroupBy(item => item.Key)
    .Select(group => group.OrderByDescending(item => item.Seq).First());

您可以尝试以下代码:

collection
.GroupBy(x => x.Key)
.Select(x => new { Key = x.Key, MaxSeq = x.Max(e => e.Seq));
你也可以

通过Linq来做到这一点:此代码如果要选择最后一个

var result = from data in YourObject
                     group data by data.Key into item
                     select new { Key = item.Key, Seq = item.Last().Seq, OtherDataOjbect= item.Last().OtherDataOjbect };

如果你想选择max,请使用这个:

var result = from data in YourObject
                     group data by data.Key into item
                     select new { Key = item.Key, Seq = item.Max(x => x.Seq), obj = item.Single(x => x.Seq == item.Max(z => z.Seq)).obj };