C#中如何判断list是否完整包含另一个list
一般可以对两个集合做交集,然后比较剩余的集合和小的集合数的关系来确定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
var listModel= new List<Model>(); //假设此集合为大的集合 var listModel2= new List<Model>(); //此集合为小集合 var result= listModel.Intersect(listModel2); if (result.Count()==listModel2.Count) { //此时大集合完整包含小集合 } else if (result.Any()&&result.Count()<listModel2.Count) { //此时小集合部分包含于大集合 } else { //此时交集无任何元素,表示他们没有相同的元素 } |
不过这个方法一般会有一些限制
因为Model可能是值类型也可能是引用类型
对于值类型,这么比较当然没问题,很容易的就得出结果了
但是对于引用类型,因为默认比较的是引用所以这里难以得到正确的结果;只能自己实现一个比较器
所以可以有另一个方法,就是根据Model的主键筛选出一个列表,然后根据此列表来查看list的包含关系
1
2
3
4
5
6
7
|
var listModel= new List<Model>(); //假设此集合为大的集合 var listModel2= new List<Model>(); //此集合为小集合 var listKey = listModel2.Select(c => c.Key).ToList(); if (listKey.All(c=>listModel.Any(s=>s.Key==c))) { //对于小集合的所有主键,如果它的任意一个键都存在于大集合中,就可以判定大集合全包含小集合 } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2020-07-31 1分钟解决VS每次运行都显示“正在还原nuget程序包”问题
2020-07-31 C#多线程和异步(一)——基本概念和使用方法
2019-07-31 Android内存优化(使用SparseArray和ArrayMap取代HashMap)
2018-07-31 sql server 执行计划(execution plan)介绍
2017-07-31 [C#进阶系列]专题一:深入解析深拷贝和浅拷贝
2015-07-31 Aspose.Words组件介绍及使用—基本介绍与DOM概述
2015-07-31 c#读取XML