zoukankan      html  css  js  c++  java
  • List之Union(),Intersect(),Except() 亦可以说是数学中的并集,交集,差集

    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(); } } } }

     

    以上运行的结果是:

    以上的结果是重载了含有参数的IEqualityComparer<TSource> 方法,实现IEqualityComparer接口  对数据进行了重复过滤,如果不实现这个方法结果是

     var bingji = oneStudents.Union(twoStudents).ToList();//并(全)集 
     var jiaoji = oneStudents.Intersect(threeStudents).ToList();//交集 
    var chaji = oneStudents.Except(threeStudents).ToList();//差集

    但是对于List<T>的T是简单类型,如int  string  long 。。。。。是怎么样的呢?代码如下所示

    IList<int> firstNumbers = new List<int>() 
     
                 { 
     
                     1,2,3,4,5,6,7 
    
                 };
    
                IList<int> secondNumbers = new List<int>() 
     
                 { 
    
                     8,9,10 
    
                 };
    
                IList<int> thressNumbers = new List<int>() 
     
                 { 
    
                     1,2,3 
    
                 };
    
    
                var result1 = firstNumbers.Union(secondNumbers).ToList();
                var result2 = firstNumbers.Intersect(thressNumbers).ToList();
                var result3 = firstNumbers.Except(thressNumbers).ToList();
                Console.WriteLine("以下是并集的结果");
                result1.ForEach(x => Console.WriteLine(x));
    
                Console.WriteLine();
                Console.WriteLine("以下是交集的结果");
                result2.ForEach(x => Console.WriteLine(x));
    
    Console.WriteLine(); Console.WriteLine(
    "以下是差集的结果"); result3.ForEach(x => Console.WriteLine(x));
    Console.WriteLine(
    "以上是简单类型如:int string long。。。。。没有实现IEqualityComparer<T>接口");

    结果是:

    说明一下 刚回来看了下书,是差集 不是补集、 已更改!

    业精于勤荒于嬉 行成于思毁于随
  • 相关阅读:
    python requests用法总结
    Linux统计某文件夹下文件的个数
    PM2使用及介绍
    如何区分USB 2.0 和USB 3.0插口
    npm突然找不到npm-cli.js的解决方法
    mRemoteNG
    js中几种实用的跨域方法原理详解
    Tornado异步阻塞解决方案
    [阅读笔记]EfficientDet
    iOS 保存视频AVAssetWriter
  • 原文地址:https://www.cnblogs.com/mistor/p/2800202.html
Copyright © 2011-2022 走看看