List之Union(),Intersect(),Except() 亦可以说是数学中的并集,交集,差集
2016-06-15 11:03
836 查看
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 ()
它将产生两个序列的交集.
方法定义是:
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)
实例代码分别如下:
以上运行的结果是:
以上的结果是重载了含有参数的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 。。。。。是怎么样的呢?代码如下所示
结果是:
复制搜索
启动快捷搜索设置
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>接口");
结果是:
复制搜索
启动快捷搜索设置
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#比较二个数组并找出相同或不同元素的方法