首页 > 编程 > C# > 正文

C#中的Linq Intersect与Except方法使用实例

2020-01-24 01:42:55
字体:
来源:转载
供稿:网友

实例描述

现有某班学生的两份成绩,两份成绩中存在一些不一致的记录。需借助于编程方法找出这些不一致的记录。

实例代码

using System;using System.Collections.Generic;using System.Linq;namespace IntersectAndExceptExp{  class Program  {    static void Main(string[] args)    {      List<Student> studentList1 = newList<Student>() {        new Student(){StudentId=1,Score=64},        new Student(){StudentId=2,Score=85},        new Student(){StudentId=3,Score=78},        new Student(){StudentId=4,Score=94},        new Student(){StudentId=5,Score=90}      };      List<Student> studentList2 = newList<Student>() {        new Student(){StudentId=1,Score=64},        new Student(){StudentId=2,Score=80},        new Student(){StudentId=3,Score=78},        new Student(){StudentId=4,Score=94},        new Student(){StudentId=5,Score=95}      };      var both = studentList1.Intersect(studentList2,new StudentComparer());      var diff1 =studentList1.Except(both, new StudentComparer());      var diff2 =studentList2.Except(both, new StudentComparer());      Console.WriteLine("-------------下面是两份成绩中不同的记录--------------");      Console.WriteLine("-------------第一份学生成绩--------------");      foreach (var s in diff1)      {        Console.WriteLine("StudentId:"+s.StudentId+";Score:"+s.Score);      }      Console.WriteLine("-------------第一份学生成绩--------------");      foreach (var s in diff2)      {        Console.WriteLine("StudentId:"+ s.StudentId + ";Score:" + s.Score);      }    }  }  public class Student  {    public int StudentId { get; set; }    public int Score { get; set; }  }  public class StudentComparer : IEqualityComparer<Student>  {    public bool Equals(Student x, Studenty)    {      if (Object.ReferenceEquals(x, y)) returntrue;      return x != null && y != null&& x.StudentId == y.StudentId && x.Score == y.Score;    }    public int GetHashCode(Student obj)    {      int hashStudentId =obj.StudentId.GetHashCode();      int hashScore =obj.Score.GetHashCode();      return hashStudentId ^ hashScore;    }  }}

代码说明

先使用Intersect方法生成两份记录的交集,该方法会使用传入的比较器对值进行比较决定记录是否相同。基于前步生成的交集,再使用Except方法找出两份记录中不一致的记录,该方法同样使用传入的比较器对值进行比较决定记录是否相同。

执行结果

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表