在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属性,具体结构如下:

1
2
3
4
5
6
public class TestModel
 {
      public int Index { set; get; }
 
     public string Name { set; get; }
 }

(1)例子1:list1集合和list2集合中的对象元素分别来之不同的对象引用,这list1和list2交集元素个数为0。

1
2
3
4
5
6
7
8
9
10
11
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交集的元素为这些相同对象引用的数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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技术小趣屋

list交集的更多相关文章

  1. C# 数组的交集、差集、并集

    C# 数组的交集.差集.并集 工作中经常会用这方面的知识来检查那些字段是必须输入的,那些是禁止输入. using System; using System.Collections.Generic; u ...

  2. 用uniq来处理文件重复数据--交集,差集,计数等(转)

    经常有这样的需求:两个文本文件要求取重复的行或只取不重复的,简单的情况下用sort和uniq来处理是非常方便的: 利用现存两个文件,生成一个新的文件 取出两个文件的并集(重复的行只保留一份) 取出两个 ...

  3. 取两个String数组的交集

    import org.testng.annotations.Test; import java.util.HashMap; import java.util.LinkedList; import ja ...

  4. Java对象的深拷贝和浅拷贝、集合的交集并集

    http://blog.csdn.net/lian_1988/article/details/45970927 http://www.cnblogs.com/yxnchinahlj/archive/2 ...

  5. java求字符串数组交集、并集和差集

    import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.Ma ...

  6. PHP计算两个时间段是否有交集(边界重叠不算)

    优化前的版本: /** * PHP计算两个时间段是否有交集(边界重叠不算) * * @param string $beginTime1 开始时间1 * @param string $endTime1 ...

  7. 取两个DataTable的交集,删除重复数据

    /// <summary> /// 取两个DataTable的交集,删除重复数据 /// </summary> /// <param name="sourceD ...

  8. C# Linq 交集、并集、差集、去重

    using System.Linq;         List<string> ListA = new List<string>(); List<string> L ...

  9. js取两个数组的交集|差集|并集|补集|去重示例代码

    http://www.jb51.net/article/40385.htm 代码如下: /** * each是一个集合迭代函数,它接受一个函数作为参数和一组可选的参数 * 这个迭代函数依次将集合的每一 ...

  10. 求两个集合的交集和并集C#

    我是用hashset<T>来实现的 具体如代码所示 using System; using System.Collections.Generic; using System.Linq; u ...

随机推荐

  1. iOS核心动画高级技巧 - 8

    iOS核心动画高级技巧 - 1 iOS核心动画高级技巧 - 2 iOS核心动画高级技巧 - 3 iOS核心动画高级技巧 - 4 iOS核心动画高级技巧 - 5 iOS核心动画高级技巧 - 6 iOS核 ...

  2. MySQL 配置参数优化

    MySQL 配置参数优化 1.修改back_log参数值:由默认的50修改为500 back_log=500back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中 ...

  3. bs4解析

    介绍:将一个html文档转换成BeautifulSoup对象,然后通过对象的方法或属性查找指定的节点内容 转换本地文件: ​ soup = BeautifulSoup(fp,'lxml') fp为文档 ...

  4. Fabric分支/版本切换问题

    (以下示例是从 release-1.4 切换到 release-1.3) 首先将 $GOAPTH/src/github.com/hyperledger/ 下1.4版本的fabric-samples给删 ...

  5. 并不对劲的THUWC2020

    day -inf 因为一些(不是寒假时长锐减的)小原因,今年(2020)THUWC在去年(2019)就举办了! 这导致某个小弱智只能临阵磨枪了QAQ- day 1 早: 没有看到吕爷,签到.试机. 签 ...

  6. BZOJ4516 SDOI2016生成魔咒(后缀自动机)

    本质不同子串数量等于所有点的len-parent树上父亲的len的和.可以直接维护. #include<iostream> #include<cstdio> #include& ...

  7. atomikos 优化JDBC性能

    JDBC performance comes for free with our pooling DataSource classes: AtomikosDataSourceBean for XA-e ...

  8. The Heaviest Non-decreasing Subsequence Problem

    最长非递减子序列变形题,把大于等于10000的copy五次放回去就可以了 ac代码: #include <cstdio> #include <cstring> #include ...

  9. Java InsertionSort

    Java InsertionSort /** * <html> * <body> * <P> Copyright 1994-2018 JasonInternatio ...

  10. 笔记: ASP.NET Core视图组件

    视图组件 asp.net core mvc 提供了部分视图的新替代品:视图组件. 视图组件与分布视图的主要区别在于视图组件与控制器不相关.可使用在独立于单个控制器的场景,如:菜单导航.侧边栏.分页栏等 ...