正在比较列表的值

本文关键字:列表 比较 | 更新日期: 2023-09-27 18:26:03

另一个列表比较问题。我现在想将一个项目的数量与另一个数量进行比较,如果第一个项目的量大于或等于第二个项目,则返回true。

public bool Equals(Item item1, Item item2)
{
    if (item1.ItemName.Equals(item2.ItemName) && item1.ItemCount >= item2.ItemCount)
    {
        return true;
    }

但无论第一个项目的数量是多少,它总是返回true。这段代码有问题还是其他地方的问题?

var commonItems = Items.Intersect(Inventory.Items, new ListComparer()).ToList();
if (commonItems.Count() == Items.Count())
{
    return Output;
}

这就是我比较列表的地方。Items将具有Item类的3个对象。1块石头、1根树枝和2棵藤蔓。这是与我的库存进行比较,即使我只有一棵葡萄藤,它也会返回真的。

忘记添加第一个代码块在一个名为的类中

public class ListComparer :IEqualityComparer<Item>

正在比较列表的值

所以你有一个像[1 rock, 1 twig, 3 vine]这样的"配方",你想知道你的库存中是否有至少所需数量的所有物品。

这里有一种你可以使用的方法:

if (Recipe.All(r => Inventory.Any(i => 
    i.Name == r.Name && i.ItemCount >= r.ItemCount))))

因此,"如果每个配方项目都与库存项目匹配,并且至少具有所需数量"。这是假设在两个列表中都不会有多个堆栈。

您不应该将Equals重新定义为除"等于"之外的任何含义。许多框架代码都是在Equals将一致工作的假设下工作的-例如,A.Equals(b)的结果将与b.Equals)的结果相同。这可能是当前让你感到困惑的原因,因为你的代码没有提供这一点,而Intersect方法将依赖它。