听起来好像以前有人问过这个答案,但事实并非如此。我正在寻找一种检查列表“ A”是否包含列表“ B”中所有元素的方法,而我从以下问题得到了答案:Does .NET have a way to check if List a contains all items in List b?。无论哪种方式,我都对此解决方案有疑问。
我的列表“ A”可以具有一系列Item
,这是一个对象,列表B也可以。如果列表B包含相同对象的2倍且我的列表“ A”,我希望我的代码返回false “ 1或更少。这段代码(摘自正确的答案):
return !RequiredItems.Except(Application._player.InventoryItems).Any();
仅检查元素是否在列表“ A”上至少存在一次。示例:
列表A:汽车
列表B:汽车,汽车
将返回true,因为列表A包含汽车,即使我希望它返回false除非它有2辆汽车。
是否有一种方法可以修改该代码以实现我想要的功能,或者有另一种方法可以实现此目的?
编辑: @HimBromBeere让我意识到我忘了说一些非常重要的事情了。列表A需要至少具有相同数量的元素才能实现目标。如果此列表A包含1000辆汽车,而列表B仅包含B,则它应返回true。如果列表A的列表B中的元素较少或没有元素(包括重复项),则只能返回false。
答案 0 :(得分:1)
我可以想象这样的基于循环的方法:
<template>
<v-form ref="form" v-model="valid">
<v-text-field
v-model="age"
:rules="[age]"
label="Label"
required
>
</v-text-field>
<v-btn
color="primary"
:disabled="!valid"
@click="submit"
>
submit
</v-btn>
<v-btn
@click="clear"
>
clear
</v-btn>
</v-form>
</template>
<script>
data(){
return{
min: 21,
max: 65,
valid: true,
}
},
methods:{
clear() {
this.$refs.form.reset()
},
age: (value) => {
return this.min < value < this.max
}
}
</script>
它对bool areEqual = true;
foreach(var g in listB.GroupBy(x => x))
{
if(listA.Count(x => x == g.Key) >= g.Count())
{
areEqual = false;
break;
}
}
的所有重复项进行分组,并检查其数量是否至少等于listB
中相同项目的数量。
这当然假定您的副本具有相同的参考。否则,您将必须执行一些相等性检查。