打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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>接口");

结果是:

 

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# Linq 交集、并集、差集、去重
C# LINQ详解(一)
C#中IEnumerable<T>.Select()、SelectMany()的简单使用
C#中LINQ技术的简单小例
LINQ标准查询运算符执行方式-非流式处理
IEnumerable的几个简单用法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服