List<T>以string类型为例,实际应用中可换做其他类型:
1:取交集
// 取交集
static void Intersection()
{
List<string> list1 = new List<string> { "AA", "BB", "CC", "EE", "GG" };
List<string> list2 = new List<string> { "BB", "DD", "GG", "MM" };
List<string> list3 = new List<string>();
list3 = list1.Intersect(list2).ToList();
Console.Write(list3.Count); //交集的个数,如果个数为0,说明没有交集
Console.WriteLine();
foreach (var s in list3) // 各个值
{
Console.Write(s);
Console.WriteLine();
}
}
结果:
2
BB
GG
2:取差集
// 取差集
static void Exception()
{
List<string> list1 = new List<string> { "AA", "BB", "CC", "EE", "GG" };
List<string> list2 = new List<string> { "BB", "DD", "GG", "MM" };
List<string> list3 = new List<string>();
list3 = list1.Except(list2).ToList();
Console.Write(list3.Count); //差集的个数,如果个数为0,说明list1中存在的值也全都存在于list2中
Console.WriteLine();
foreach (var s in list3) // 各个值
{
Console.Write(s);
Console.WriteLine();
}
}
结果:
3
AA
CC
EE
如果把取差集代码中的
list3 = list1.Except(list2).ToList();
换成
list3 = list2.Except(list1).ToList();
结果如下:
2
DD
MM
listA.Except(B).ToList();
注:差集表示listA中哪些值是listB中所不存在的;
3:取并集
// 取并集
static void Union()
{
List<string> list1 = new List<string> { "AA", "BB", "CC", "EE", "GG" };
List<string> list2 = new List<string> { "BB", "DD", "GG", "MM" };
List<string> list3 = new List<string>();
list3 = list1.Union(list2).ToList();
Console.Write(list3.Count); //并集的个数,一般不会为0,除非list1和list2中的元素个数都为0
Console.WriteLine();
foreach (var s in list3) // 各个值
{
Console.Write(s);
Console.WriteLine();
}
}
结果:
7
AA
BB
CC
EE
GG
DD
MM
如果把上面取并集代码中的
list3 = list1.Union(list2).ToList();
换成
list3 = list1.Concat(list2).ToList();
或
list1.AddRange(list2);
list3.AddRange(list1);
则将会保留重复项
结果如下:
9
{AA, BB, CC, EE, GG, BB, DD, GG, MM }