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

如何移除列表中Teil字段的重复项及对应整行数据

按Teil字段去重的实现方法

针对你的自定义类List,要按Teil字段去重(移除所有Teil重复的整行,只保留每个Teil的一条数据),有几种实用的实现方式:

方法一:使用GroupBy + Select取组内首项

这是最简洁的方式,通过GroupBy将相同Teil的元素分组,然后从每组中取第一个元素(也可根据需求取最后一个):

// 假设你的自定义类名为YourCustomClass
var distinctList = originalList
    .GroupBy(item => item.Teil)
    .Select(group => group.First()) // 若要保留最后出现的重复项,替换为group.Last()
    .ToList();

如果需要忽略Teil的大小写,可在GroupBy里指定字符串比较规则:

var distinctList = originalList
    .GroupBy(item => item.Teil, StringComparer.OrdinalIgnoreCase)
    .Select(group => group.First())
    .ToList();

方法二:自定义IEqualityComparer配合Distinct

默认Distinct会比较整个对象的所有属性,我们可以写一个只对比Teil字段的比较器,传给Distinct方法:
首先定义比较器类:

public class TeilEqualityComparer : IEqualityComparer<YourCustomClass>
{
    public bool Equals(YourCustomClass x, YourCustomClass y)
    {
        if (x == null || y == null)
            return x == y;
        // 按需选择是否忽略大小写,这里用OrdinalIgnoreCase示例
        return string.Equals(x.Teil, y.Teil, StringComparison.OrdinalIgnoreCase);
    }

    public int GetHashCode(YourCustomClass obj)
    {
        // 对应Equals的比较规则,保证哈希码一致
        return obj.Teil?.GetHashCode(StringComparison.OrdinalIgnoreCase) ?? 0;
    }
}

然后调用Distinct:

var distinctList = originalList.Distinct(new TeilEqualityComparer()).ToList();

方法三:用HashSet手动跟踪已出现的Teil

这种方式适合需要在去重过程中添加额外逻辑的场景,比如过滤null值或自定义筛选条件:

var seenTeils = new HashSet<string>(StringComparer.OrdinalIgnoreCase); // 可选忽略大小写
var distinctList = new List<YourCustomClass>();

foreach (var item in originalList)
{
    // 若Teil未出现过,就添加到结果列表,并标记为已出现
    if (seenTeils.Add(item.Teil))
    {
        distinctList.Add(item);
    }
}

或者用Linq的Aggregate简化写法:

var seenTeils = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
var distinctList = originalList.Aggregate(new List<YourCustomClass>(), (list, item) =>
{
    if (seenTeils.Add(item.Teil))
        list.Add(item);
    return list;
});

注意事项

  • 如果Teil字段可能为null,上面的方法都已做处理,null会被视为同一个重复项
  • 选择保留哪一条重复数据(首项/末项),根据业务需求调整First()/Last()或遍历顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:01:54