为了账号安全,请及时绑定邮箱和手机立即绑定

检查列表“A”是否包含列表“B”中的每个元素

检查列表“A”是否包含列表“B”中的每个元素

C#
犯罪嫌疑人X 2022-10-23 13:35:52
听起来好像以前有人问过这个答案,但不一样。我正在寻找一种方法来检查列表“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。


这当然假设您的重复项的引用相等。否则你将不得不实施一些平等检查。


查看完整回答
反对 回复 2022-10-23
  • 1 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信