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

C#中如何对比两个列表并移除已存在于另一列表的项

C# 列表差集实现方案

C# 内置了现成的方法,完全不需要手动写循环就能实现「移除当前列表中存在于另一列表的项」的需求,常用的有两种实现方式,根据你是否需要保留原列表选择即可。


方式1:生成新的结果列表(不修改原列表)

引入System.Linq命名空间后,直接用LINQ提供的Except()扩展方法即可,该方法会返回两个列表的差集,不会改动原始的两个列表数据:

using System.Linq;
using System.Collections.Generic;

// 业务示例
List<string> myList = new List<string> { "苹果", "香蕉", "橙子", "葡萄" };
List<string> itemsToRemove = new List<string> { "香蕉", "葡萄" };

// 一行代码得到排除后的结果
List<string> filteredList = myList.Except(itemsToRemove).ToList();
// filteredList 最终内容:["苹果", "橙子"]

注意:如果列表存储的是自定义类对象,你可以通过Except()的重载传入自定义相等比较器,或者给类实现IEquatable<T>接口来指定重复判断规则。


方式2:直接修改原列表

如果不需要保留原列表内容,可以直接用List<T>自带的RemoveAll()方法,传入匹配待移除项的判断条件即可,同样不需要手写循环:

// 直接在原列表上移除符合条件的项
myList.RemoveAll(item => itemsToRemove.Contains(item));

性能提示:如果待移除的列表数据量较大,建议先把待移除列表转为HashSet<T>再做包含判断,能把时间复杂度从O(nm)降到O(n),大幅提升执行效率:*

HashSet<string> removeSet = new HashSet<string>(itemsToRemove);
myList.RemoveAll(item => removeSet.Contains(item));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:39:03