C#扩展Distinct判断数组集合是否重复

首先看一个数组结合:

List<person> list=new List<person>();
list.Add(new person{id=1,name="张三"});
list.Add(new person{id=2,name="李四"});
list.Add(new person{id=1,name="张三"});
list.Add(new person{id=3,name="王五"});
list集合已经包含“张三”这个人了,而我们只想去不重复的数据,那怎么办呢?

有些同学说可以用Distinct方法呀,但是Distinct只能判断单个类型,如List<string>,不能判断List<person>。

1.循环list集合,重新组织一个新的list。(ps:这种方法不推荐)

2.扩展Distinct方法。

如何扩展:

创建CommonEqualityComparer类

public class CommonEqualityComparer<T, V> : IEqualityComparer<T>
    {
        private Func<T, V> keySelector;

        public CommonEqualityComparer(Func<T, V> keySelector)
        {
            this.keySelector = keySelector;
        }

        public bool Equals(T x, T y)
        {
            return EqualityComparer<V>.Default.Equals(keySelector(x), keySelector(y));
        }

        public int GetHashCode(T obj)
        {
            return EqualityComparer<V>.Default.GetHashCode(keySelector(obj));
        }
    }
    public static class DistinctExtensions
    {
        public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)
        {
            return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));
        }
    }

调用:

var newList=list.Distinct(m => m.name).ToList();

这样就能筛选重复的数据。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低调之人

略表心意,哈哈哈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值