C#编程之C# 两个集合比较差值 Linq的Except的用法
小标 2018-12-14 来源 : 阅读 2754 评论 0

摘要:本文主要向大家介绍了C#编程之C# 两个集合比较差值 Linq的Except的用法,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

本文主要向大家介绍了C#编程之C# 两个集合比较差值 Linq的Except的用法,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

值类型的集合比较差值
    List strList1 = new List(){"a", "b", "c", "d"};
    List strList2 = new List() { "a", "b", "f", "e"};

    var strList3 = strList1.Except(strList2).ToList();
    for (int i = 0; i < strList3.Count; i++)
    {
        Console.WriteLine(strList3[i]);
    }
输出的结果是 c d

var strList3 = strList1.Except(strList2).ToList();

这里的意思是strList1中哪些是strList2中没有的,并将获得的差值存放在strList3 (即:strList1中有,strList2中没有)

var strList3 = strList2.Except(strList1).ToList();

这样输出的结果就是 f e
这里将strList1与strList2位置对调下,就是strList2中哪些是strList1中没有的存放在strList3 (即:strList2中有,strList1中没有)
引用类型的集合比较差值
首先创建Student类
    public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
然后创建2个List
    List studentList1=new List()
    {
        new Student(){Id = 1,Name = "小明"},
        new Student(){Id = 2,Name = "小刚"},
        new Student(){Id = 3,Name = "小红"},
    };

    List studentList2 = new List()
    {
        new Student(){Id = 1,Name = "小明"}
    };

    var studentList3 = studentList1.Except(studentList2).ToList();
    for (int i = 0; i < studentList3.Count; i++)
    {
        Console.WriteLine($"学号: {studentList3[i].Id} 姓名: {studentList3[i].Name}");
    }
结果输出
学号: 1 姓名: 小明
学号: 2 姓名: 小刚
学号: 3 姓名: 小红
这是因为Except通过使用默认的相等比较器对值进行比较,生成两个序列的差集,需要重写 Equals和GetHashCode 方法
如下:

方法一

    public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public override bool Equals(object obj)
        {
            if (obj is Student)
            {
                Student student = obj as Student;
                return Id == student.Id && Name == student.Name;
            }
            return false;
        }
        public override int GetHashCode()
        {
            return Id.GetHashCode() ^ Name.GetHashCode();
        }
    }

方法二重写一个类让它继承IEqualityComparer

    public class StudentComparer: IEqualityComparer
    {
        public bool Equals(Student x, Student y)
        {
            return x.Id == y.Id && x.Name == y.Name;
        }

        public int GetHashCode(Student obj)
        {
            return obj.Id.GetHashCode() ^ obj.Name.GetHashCode();
        }
    }
***** 特别注意
var studentList3 = studentList1.Except(studentList2,new StudentComparer()).ToList();
这里需要加上参数 new StudentComparer()

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程