zoukankan      html  css  js  c++  java
  • List Except 操作,IEqualityComparer 使用

    1.此接口用于对集合 的自定义相等比较算法的实现。包含2个方法:

         Equals(T,T): 确定指定的对象是否相等。 T 为要比较的对象类型;

         GetHashCode(T) :返回指定对象的哈希代码。如果两个对象的Equal 比较结果相等,则他们hashCode返回的对象也必须返回同一个值

    2. 官方建议继承 EqualityComparer<T> 而不是实现 IEqualityComparer<T>

    3.

    Union()

    这个方法将会Union(并集)两个序列(集合)连接成一个新列表(集合)

    public static IEnumerable<TSource> Union<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second)

    public static IEnumerable<TSource> Union<TSource>(this IEnumerable<TSource> first,IEnumerable<TSource> second, IEqualityComparer<TSource> comparer)

     

     

    Intersect ()

     

    它将产生两个序列的交集.

    方法定义是: 

    public static IEnumerable<TSource> Intersect<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second) 
    
    public static IEnumerable<TSource> Intersect<TSource>(this IEnumerable<TSource> first, Enumerable<TSource> second,IEqualityComparer<TSource> comparer) 

     

     

    Except ()

     

    它是从一个集合中删除存在另一个集合中的项.两个序列产生的集合差. 英文意思是:除此之外

     

    方法定义是: 

     

    public static IEnumerable<TSource> Except<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second) 
    public static IEnumerable<TSource> Except<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer)

     

    实例代码分别如下:

     

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data; 
    
    
    namespace test
    {
        class Program
        {
            static void Main(string[] args)
            {
                IList<Student> oneStudents = new List<Student>();
                oneStudents.Add(new Student(1,false,"小新1","徐汇"));
                oneStudents.Add(new Student(2,false,"小新2","闵行"));
                oneStudents.Add(new Student(3, false, "小新3", "嘉定"));
                oneStudents.Add(new Student(4, false, "小新4", "闸北"));
    
                IList<Student> twoStudents = new List<Student>();
                twoStudents.Add(new Student(5, false, "小新5", "贵州"));
                twoStudents.Add(new Student(6, false, "小新6", "湖北"));
                twoStudents.Add(new Student(7, false, "小新7", "山东"));
                twoStudents.Add(new Student(8, false, "小新8", "西藏"));
    
                IList<Student> threeStudents = new List<Student>();
                threeStudents.Add(new Student(1, false, "小新1", "徐汇"));
                threeStudents.Add(new Student(2, false, "小新2", "闵行"));
                var bingji = oneStudents.Union(twoStudents, new StudentListEquality()).ToList();//并(全)集 
                  var jiaoji = oneStudents.Intersect(threeStudents, new StudentListEquality()).ToList();//交集 
                  var chaji = oneStudents.Except(threeStudents, new StudentListEquality()).ToList();//差集
    
                  Console.WriteLine();
                Console.WriteLine("以下是并集的结果");            
                bingji.ForEach(x =>
                {
                    Console.WriteLine(x.StudentId.ToString() + "    " + x.Sex.ToString() + "   " + x.Name.ToString()+" "+x.Address.ToString());
         
                });
                Console.WriteLine();
                Console.WriteLine("以下是交集的结果");           
                jiaoji.ForEach(x =>
                {
                    Console.WriteLine(x.StudentId.ToString() + "    " + x.Sex.ToString() + "   " + x.Name.ToString() + " " + x.Address.ToString());
    
                });
    
                Console.WriteLine();
                Console.WriteLine("以下是差集的结果");            
                chaji.ForEach(x =>
                {
                    Console.WriteLine(x.StudentId.ToString() + "    " + x.Sex.ToString() + "   " + x.Name.ToString() + " " + x.Address.ToString());
    
                });
            }
    
        }
    
    
    
    
    
        public class Student
        {
            public Student(int studentId, bool sex, String name, String address)
            {
                this.StudentId = studentId;
                this.Sex = sex;
                this.Name = name;
                this.Address = address;
            }
            public int StudentId { get; set; }
            public bool Sex { get; set; }
            public String Name { get; set; }
            public String Address { get; set; }
           
        }
        public class StudentListEquality : IEqualityComparer<Student>
        {
            public bool Equals(Student x, Student y)
            {
                return x.StudentId == y.StudentId;
            }
    
            public int GetHashCode(Student obj)
            {
                if (obj == null)
                {
                    return 0;
                }
                else
                {
                    return obj.ToString().GetHashCode();
                }
            }
        }
    
    
    
    }

     

     

  • 相关阅读:
    Ubuntu在下面LAMP(Linux+Apache+MySQL+PHP) 开发环境的搭建
    直接插入排序、折半插入排序、Shell排序、冒泡排序,选择排序
    java插入字符串
    bash,bg,bind,break,builtin,caller,compgen, complete,compopt,continue,declare,dirs,disown,enable,eval,exec,expo
    socket用法
    org.jsoup.select.Selector
    达达技术
    CentOS 6.4 文件夹打开方式
    shell加法
    shell统计
  • 原文地址:https://www.cnblogs.com/benhua/p/6805192.html
Copyright © 2011-2022 走看看