您的位置:首页 > 编程语言 > C#

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 }

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)
{

}


交 差 并 包含
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: