C#中如何判断list是否完整包含另一个list

 我来答
我零0七
2021-04-12 · 热衷人生的有效性,关注自我
我零0七
采纳数:684 获赞数:11738

向TA提问 私信TA
展开全部

一般可以对两个集合做交集,然后比较剩余的集合和小的集合数的关系来确定

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的包含关系

 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))) 
 {    
  //对于小集合的所有主键,如果它的任意一个键都存在于大集合中,就可以判定大集合全包含小集合
 }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式