今天工作遇到两个集合要求出差集,百度了一下然后做了以下测试,跟大家分享一下。
目的:求出自己所需要的集合(差集,交集,并集)
以下是自己写的测试代码
class Program
{
public class MyClass
{
public string Name { get; set; }
public int Age { get; set; }
}
static void Main(string[] args)
{
var list1 = new List<MyClass>();
var list2 = new List<MyClass>();
for (int i = 1; i < 5; i++)
{
var item = new MyClass();
item.Name = "mumu" + i.ToString();
item.Age = 24 + i;
list1.Add(item);
}
for (int i = 3; i < 7; i++)
{
var item = new MyClass();
item.Name = "mumu" + i.ToString();
item.Age = 24 + i;
list2.Add(item);
}
foreach (var model in list1)
{
Console.WriteLine("list1: " + model.Name + ";" + model.Age);
}
foreach (var model in list2)
{
Console.WriteLine("list2: " + model.Name + ";" + model.Age);
}
//根据List1求和list2的差集
var list = list1.Except(list2, new Student()).ToList();
foreach (var model in list)
{
Console.WriteLine("list12 " + model.Name + ";" + model.Age);
}
//根据List2求和list1的差集
var list3 = list2.Except(list1, new Student()).ToList();
foreach (var models in list3)
{
Console.WriteLine("list21 " + models.Name + ";" + models.Age);
}
//求list2和list1的交集
list2.Intersect(list1, new Student()).ToList().ForEach(m =>
{
Console.WriteLine("listIntersect " + m.Name + ";" + m.Age);
});
//根据list2 求list2与list1的并集
list2.Union(list1, new Student()).ToList().ForEach(m =>
{
Console.WriteLine("listUnion " + m.Name + ";" + m.Age);
});
//使用RemoveAll获取符合条件的集合
list1.RemoveAll(m =>
{
if (m.Age > 24 &&m.Age < 27) return true;
return false;
});
list1.ForEach(m =>
{
Console.WriteLine("listtt " + m.Name + ";" + m.Age);
});
Console.ReadLine();
}
public class Student : IEqualityComparer<MyClass>
{
public bool Equals(MyClass x, MyClass y)
{
if (x.Name == y.Name && x.Age == y.Age) return true;//需要根据什么条件进行判断。
return false;
}
public int GetHashCode(MyClass obj)
{
if (obj == null)
{
return 0;
}
else
{
return obj.ToString().GetHashCode();
}
}
}
}
相关注释已写上;运行结果如下。
如果集合是int型或者string型可直接使用
list1.Intersect(list2);
list1.Except(list2);
list1.Union(list2);