听起来好像以前有人问过这个答案,但不一样。我正在寻找一种方法来检查列表“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。
1 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
我可以想象这样一种基于循环的方法:
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。
这当然假设您的重复项的引用相等。否则你将不得不实施一些平等检查。
- 1 回答
- 0 关注
- 118 浏览
添加回答
举报
0/150
提交
取消