c# - 检查列表“A”是否包含列表“B”中的每个元素
问题描述
听起来好像以前有人问过这个答案,但不一样。我正在寻找一种方法来检查列表“A”是否包含列表“B”中的所有元素,我从这个问题中得到了答案:Does .NET have a way to check if List a contains all items in List b ? . 不管怎样,我对这个解决方案有疑问。
我的列表“A”可以有一系列Item
对象,列表 B 也可以,如果列表 B 包含 2 次相同的对象并且我的列表“A”为 1 或更少,我希望我的代码返回 false。这段代码(取自正确答案):
return !RequiredItems.Except(Application._player.InventoryItems).Any();
仅检查元素是否在列表“A”中至少存在一次。例子:
清单 A:汽车
清单 B:汽车,汽车
将返回 true,因为 List A 包含一辆汽车,即使我希望它返回 false,除非它有 2 辆汽车。
有没有办法修改该代码以制作我想要的东西,或者有另一种方法来实现这一点?
编辑: @HimBromBeere 让我意识到我忘了说一些非常重要的事情。列表 A 需要至少具有相同数量的元素才能实现目标。如果此列表 A 包含 1000 辆汽车,而列表 B 仅包含 B,则它应该返回 true。如果列表 A 在列表 B 中包含较少或没有元素(包括重复项),则它只能返回 false。
解决方案
我可以想象这样一种基于循环的方法:
bool areEqual = true;
foreach(var g in listB.GroupBy(x => x))
{
if(listA.Count(x => x == g.Key) >= g.Count())
{
areEqual = false;
break;
}
}
它对 的所有重复项进行分组,listB
并检查它们的数量是否至少是来自 的相等项目的数量listA
。
这当然假设您的重复项的引用相等。否则你将不得不实施一些平等检查。
推荐阅读
- google-analytics - Analytics v4 更新后如何使用 webDataStream 从 Analytics Reporting Api 获取数据?
- javascript - 如何更改提供文本格式?
- image-processing - 除了使用 OpenCV python 的 bean 之外,有没有办法可以删除图像中的其他组件?
- r - 如何按日期对只有 R 的月份和日期的列进行排序?
- apache-spark - 使用 Spark 和 Jupyter Notebook 过滤、映射数据集中的问题
- google-cloud-platform - Cloud Sql 代理私有 IP 外部应用程序
- google-chrome - iframe 历史导航在 Chrome 中不起作用
- mysql - 如何使用mysql通过查询将逗号分隔的值拆分为多行
- javascript - Keycloak - 使用管理 API 通过循环向用户添加客户端角色
- node.js - NodeJS:SSH2 - 从流中读取最后 1000 个字母