• 用泛型的IEqualityComparer<T> 去除去重复项


    题目:下列数据放在一个List中,当ID和Name都相同时,去掉重复数据

    ID Name
    1 张三
    1 李三
    1 小伟
    1 李三 
    2 李四
    2 李武

    ------------------------------------------------------------------------------------------------------------

    解决这个问题,方法很多,最开始想到的就Enumerable.Distinct方法

    我们可能经常用的是Distinct<TSource>(IEnumerable<TSource>)

    用它对数组这一类去重复

    这里要用Distinct<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>) 使用指定的 IEqualityComparer<T> 对值进行比较

    一、先为数据做个实体类:User

    publicclassUser
    {
    publicUser(intid, stringname)
    {
    Id = id;
    Name = name;
    }

    publicintId { get; set; }

    publicstringName { get; set; }
    }

    二、再自定义一个User比较类(实现IEqualityComparer<T>接口):UserComparer

    publicclassUserComparer : IEqualityComparer<User>
    {
    #regionIEqualityComparer<User> 成员
    publicboolEquals(User x, User y)
    {
    if(x.Id == y.Id && x.Name == y.Name) //分别对属性进行比较
    returntrue; 
    else
    returnfalse; 
    }

    publicintGetHashCode(User obj)
    {
    return0;
    }
    #endregion
    }

    自定义一个比较类,去继承IEqualityComparer接口,做一个Distinct方法的比较器。。

    Equals方法中对实体进行和你需求相关的比较操作,返回bool类型的返回值

    三、最后是去重复测式类:XXXX.Distinct(newUserComparer());进行去重复操作

    publicclassMainClass
    {
    publicstaticvoidMain()
    {
    List<User> list = newList<User>(); //添加一些测式数据
    list.Add(newUser(1, "张三"));
    list.Add(newUser(1, "李三"));
    list.Add(newUser(1, "小伟"));
    list.Add(newUser(1, "李三"));
    list.Add(newUser(2, "李四"));
    list.Add(newUser(2, "李武"));

    varquery = list.Distinct(newUserComparer()); //去重复

    foreach(varitem inquery)
    {
    Console.WriteLine(item.Id + ","+ item.Name); //输出Distinct之后的结果
    }

    Console.ReadLine();
    //输出结果:
    //1 , 张三
    //1 , 李三
    //1 , 小伟 
    //2 , 李四
    //2 , 李武
    }
    }
  • 相关阅读:
    「SDOI2014」向量集 解题报告
    HNOI 2014 世界树
    LOJ #2205. 「HNOI2014」画框 解题报告
    KM模板
    洛谷 [HNOI2014]道路堵塞 解题报告
    [AHOI2014/JSOI2014] 解题报告
    AndroidStudio中添加依赖的三种方式以及如何引入so文件和arr文件
    android 四大组件详解
    Android—— ListView 的简单用法及定制ListView界面
    Android Studio 使用VCS版本控制
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2701291.html
Copyright © 2020-2023  润新知