查找集合中一组项的最后一项
本文关键字:一项 最后 集合 查找 一组 | 更新日期: 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 };