You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件的列表筛选与分组:保留指定记录的技术实现

列表数据的分组筛选处理

原始数据

[
   {
      "Id": 123,
      "Name": "Admin",
      "Group": 1,
      "OldValue": 2,
      "LastestValue": 1
   },
   {
      "Id":123,
      "Name": "Admin",
      "Group": 1,
      "OldValue": 0,
      "LastestValue": 1
   },
   {
      "Id": 456,
      "Name": "Worker",
      "Group": 2,
      "OldValue": 0,
      "LastestValue": 1
   }
]

现有代码问题

当前代码仅提取了Name重复的记录,会漏掉Name唯一的条目(如Id=456的记录),无法满足需求:

Dim result = myList.GroupBy(Function(i) i.Name).Where(Function(p) p.Count >1).SelectMany(Function(k) k).ToList()

需求逻辑

  • 按Name对列表进行分组
  • 分组后记录数大于1的项:对比组内第一条和最后一条记录的LastestValue,若二者相等,仅保留组内最后一条记录
  • 分组后仅含单条记录的项:直接保留该记录

解决方案代码

Dim result = myList.GroupBy(Function(i) i.Name).Select(Function(group)
    ' 处理单条记录的分组
    If group.Count() = 1 Then
        Return group.First()
    Else
        ' 提取第一条和最后一条的LastestValue
        Dim firstLastestVal = group.First().LastestValue
        Dim lastLastestVal = group.Last().LastestValue
        
        ' 若值匹配则返回最后一条记录
        If firstLastestVal = lastLastestVal Then
            Return group.Last()
        End If
        
        ' 若值不匹配,可根据实际需求补充处理逻辑,此处返回Nothing后续过滤
        Return Nothing
    End If
)' 过滤掉可能的空项
.Where(Function(item) item IsNot Nothing).ToList()

期望结果

[
   {
      "Id": 123,
      "Name": "Admin",
      "Group": 1,
      "OldValue": 0,
      "LastestValue": 1
   },
   {
      "Id": 456,
      "Name": "Worker",
      "Group": 2,
      "OldValue": 0,
      "LastestValue": 1
   }
]

内容的提问来源于stack exchange,提问作者Sharpeye500

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:33:23