C# 对List<T>取交集、连集及差集
2016-06-24 10:04
661 查看
转:http://www.cnblogs.com/shuibin/archive/2012/04/19/2457867.html
//Union()这个方法将会Union(并集)两个序列(集合)连接成一个新列表(集合)
//Intersect ()它将产生两个序列的交集
//Except ()它是从一个集合中删除存在另一个集合中的项.两个序列产生的集合差. 英文意思是:除此之外
1. 取交集 (A和B都有)
List A : { 1 , 2 , 3 , 5 , 9 }
List B : { 4 , 3 , 9 }
結果 : { 3 , 9 }
判断A和B是否有交集
2. 取差集 (A有,B沒有)
List A : { 1 , 2 , 3 , 5 , 9 }
List B : { 4 , 3 , 9 }
結果 : { 1 , 2 , 5 }
判断A和B是否有差集
3. 取连集 (包含A和B)
List A : { 1 , 2 , 3 , 5 , 9 }
List B : { 4 , 3 , 9 }
{
{
}
}
結果 : { 1 , 2 , 3 , 5 ,9 , 4 }
LinQ已有內建方法Union可取连集:listA.Union(listB).ToList();
==========================================
合并两个数组,并去掉重复元素,然后排序(C#)
交 差 并 包含
//Union()这个方法将会Union(并集)两个序列(集合)连接成一个新列表(集合)
//Intersect ()它将产生两个序列的交集
//Except ()它是从一个集合中删除存在另一个集合中的项.两个序列产生的集合差. 英文意思是:除此之外
1. 取交集 (A和B都有)
List A : { 1 , 2 , 3 , 5 , 9 }
List B : { 4 , 3 , 9 }
var intersectedList = list1.Intersect(list2);
結果 : { 3 , 9 }
判断A和B是否有交集
bool
isIntersected = list1.Intersect(list2).Count() > 0
2. 取差集 (A有,B沒有)
List A : { 1 , 2 , 3 , 5 , 9 }
List B : { 4 , 3 , 9 }
var expectedList = list1.Except(list2);
結果 : { 1 , 2 , 5 }
判断A和B是否有差集
bool
isExpected = list1.Expect(list2).Count() > 0
3. 取连集 (包含A和B)
List A : { 1 , 2 , 3 , 5 , 9 }
List B : { 4 , 3 , 9 }
public
static
class
ListExtensions
{
public
static
List<T> Merge<T>(
this
List<T> source, List<T> target)
{
List<T> mergedList =
new
List<T>(source);
mergedList.AddRange(target.Except(source));
return
mergedList;
}
}
var mergedList = list1.Merge(list2);
結果 : { 1 , 2 , 3 , 5 ,9 , 4 }
LinQ已有內建方法Union可取连集:listA.Union(listB).ToList();
==========================================
合并两个数组,并去掉重复元素,然后排序(C#)
List<string> a = new List<string>{ "a", "b", "c" }; List<string> b = new List<string> { "b", "c", "d", "e" }; List<string> c1 = a.Except(b).ToList(); //a //A跟B的差异(B的里面不存在的数据) List<string> c2 = b.Except(a).ToList(); //d e //B跟A的差异(A的里面不存在的数据) List<string> c3 = a.Except(c1).ToList(); //b c List<string> c4 = a.Except(c2).ToList(); //a b c List<string> c5 = b.Except(c1).ToList(); //b c d e List<string> c6 = b.Except(c2).ToList(); //b c //Union()这个方法将会Union(并集)两个序列(集合)连接成一个新列表(集合) //Intersect ()它将产生两个序列的交集 //Except ()它是从一个集合中删除存在另一个集合中的项.两个序列产生的集合差. 英文意思是:除此之外 List<string> d1 = a.Union(b).ToList(); //a b c d e //集合ab合并,剔除重复项 List<string> d2 = a.Concat(b).ToList(); //a b c b c d e//集合ab合并,保留重复项 int m1 = a.BinarySearch("b"); //判断集合中是否包含某个值.如果包含则返回位置索引 //判断集合A B是否相等 if (c1.Any()||c2.Any()) { } if (c1.Count()!=0||c2.Count()!=0) { }
交 差 并 包含
相关文章推荐
- C# 正则判断DateTime类型,int类型,Decimal类型
- 漫谈C#编程语言在游戏领域的应用
- C# 讲解五种导出access数据到Excel文件格式中
- C#实现打印与打印预览功能
- C#中的变量和常量
- C#程序基本结构
- C#开发环境简介
- C#中Attribute介绍
- C#高级功能(一)Lambda 表达式
- C#窗体截图保存的实现
- Npoi操作excel
- C# 字符串各种变形(个人整理)
- c# Dictionary的遍历和排序(转)
- C#关于控件的上下左右移动
- c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别详解
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- C#中正则表达式的使用
- 扩展类:类型转换
- C# 图形面积计算
- c# List的排序