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

C#如何筛选新列表中的新增项及Size大于旧列表的已有项

How to filter newList to include both new items and existing items with larger Size?

你的代码目前只筛选出了完全新增的条目(也就是名字不在oldList里的项,比如F3),但漏掉了「名字存在于oldList但Size更大」的情况(比如F2)。咱们调整一下Where的判断条件,把两种符合需求的情况都覆盖即可:

推荐方案(高效版)

首先把oldList转换成字典,这样可以快速通过Name查找对应的Size,避免重复遍历oldList(数据量大时性能优势明显):

// 将oldList转换为Name -> Size的映射字典
var oldItemSizeMap = oldList.ToDictionary(item => item.Name, item => item.Size);

var filteredList = newList.Where(newItem => 
    // 情况1:该条目是新增的(名字不在oldList中)
    !oldItemSizeMap.ContainsKey(newItem.Name)
    // 情况2:名字存在,但newList中的Size大于oldList对应项的Size
    || (oldItemSizeMap.ContainsKey(newItem.Name) && newItem.Size > oldItemSizeMap[newItem.Name])
).ToList();

简化版(适合小数据量)

如果你的数据量很小,也可以直接在Where条件里判断,不用转字典:

var filteredList = newList.Where(newItem => 
    // 新增条目
    !oldList.Any(oldItem => oldItem.Name == newItem.Name)
    // 已有条目但Size更大
    || oldList.Any(oldItem => oldItem.Name == newItem.Name && newItem.Size > oldItem.Size)
).ToList();

结果验证

运行上述代码后,filteredList会包含:

  • F2:因为它的Size(126)大于oldList中对应项的Size(125)
  • F3:因为它是oldList中没有的新增条目

而Size相同的F1会被正确忽略,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:27:33