【转载】C#编程中两个List集合使用Intersect方法求交集
在c#语言程序设计中,list集合是常用的集合数据类型,在涉及集合类型的运算中,有时候我们需要计算2个list集合*有的数据,即对2个list集合求交集运算。此时可以使用c#语言提供的intersect方法快速来实现两个集合之间的交集运算。except方法调用的格式为:list1.intersect(list2),list1和list2是相同类型的list集合数据,求出交集数据后可再使用tolist方法转换回list集合类型数据。
例如下列两个集合都为list<int>集合,list1包含的数据有: 1, 2, 3, 4, 5, 6, 7 。list2包含的数据有:4, 5, 6, 7, 8, 9, 10。针对list1和list2求交集可使用以下语句:
list<int> list1 = new list<int>() { 1, 2, 3, 4, 5, 6, 7 };
list<int> list2 = new list<int>() { 4, 5, 6, 7, 8, 9, 10 };
list<int> jiaojilist = list1.intersect(list2).tolist();//使用intersect方法求交集运算。
最后得到的结果集合jiaojilist中的数据为:4,5,6,7。
上述语句只针对普通基础的值类型,如果针对自定义类的对象的话,如果要求交集运算,则是需要相同的对象引用才算是交集中的数据,而非两个对象相同即是交集。
下面以2个例子来阐述上述加粗这部分的含义,首先我们定义要使用测试的类为testmodel类,类中只有简单的index和name属性,具体结构如下:
public class testmodel
{
public int index { set; get; }
public string name { set; get; }
}
(1)例子1:list1集合和list2集合中的对象元素分别来之不同的对象引用,这list1和list2交集元素个数为0。
list<testmodel> list1 = new list<testmodel>();
list1.add(new testmodel() { index = 1, name = "testmodel1" });
list1.add(new testmodel() { index = 2, name = "testmodel2" });
list1.add(new testmodel() { index = 3, name = "testmodel3" });
list1.add(new testmodel() { index = 4, name = "testmodel4" });
list<testmodel> list2 = new list<testmodel>();
list2.add(new testmodel() { index = 3, name = "testmodel3" });
list2.add(new testmodel() { index = 4, name = "testmodel4" });
list2.add(new testmodel() { index = 5, name = "testmodel5" });
list2.add(new testmodel() { index = 6, name = "testmodel6" });
从运行的结果来看:jiaojilist为空集合,里面没有任何对象。
(2)例子2:list1集合和list2集合中的部分元素的对象引用是一致的时候,list1和list2交集的元素为这些相同对象引用的数据。
list<testmodel> list1 = new list<testmodel>();
list<testmodel> list2 = new list<testmodel>();
testmodel model1 = new testmodel() { index = 1, name = "testmodel1" };
testmodel model2 = new testmodel() { index = 2, name = "testmodel2" };
testmodel model3 = new testmodel() { index = 3, name = "testmodel3" };
testmodel model4 = new testmodel() { index = 4, name = "testmodel4" };
list1.add(model1);
list1.add(model2);
list1.add(model3);
list2.add(model2);
list2.add(model3);
list2.add(model4);
list<testmodel> jiaojilist = list1.intersect(list2).tolist();
从运行的结果来看:jiaojilist含有2个元素,分别为model2和model3。
关于对象集合的交集的运算,例子1和例子2的差别读者详细斟酌下即可理解,是以对象的引用来判断的,而非对象的每个属性值都相同来判断,针对于自定义类对象的list集合求交集的时候需要注意这些事项。
备注:原文转载自博主个人技术站点it技术小趣屋,原文链接c#编程中两个list集合使用intersect方法求交集_it技术小趣屋。
推荐阅读
-
【转载】C#中List集合使用RemoveRange方法移除指定索引开始的一段元素
-
【转载】C#中List集合使用Contains方法判断是否包含某个对象
-
【转载】C#中使用Average方法对List集合中相应元素求平均值
-
【转载】C#中List集合使用LastOrDefault方法查找出最后一个符合条件的元素
-
【转载】C#中List集合使用RemoveAt方法移除指定索引位置的元素
-
【转载】C#中List集合使用Reverse方法对集合中的元素进行倒序反转
-
【转载】 C#中使用CopyTo方法将List集合元素拷贝到数组Array中
-
【转载】C#中List集合使用GetRange方法获取指定索引范围内的所有值
-
【转载】C#中List集合使用Clear方法清空集合
-
【转载】C#中List集合使用Max()方法查找到最大值