比较列表的值

时间:2014-10-09 00:50:19

标签: c#

比较问题的另一个列表。我现在想比较一个项目的数量与另一个数量,如果第一个项目的数量大于或等于第二个项目,则返回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;
}

这是我比较列表的地方。项目将有3个类Item对象。 1块岩石,1根树枝和2棵藤蔓。这与我的库存进行比较,即使我只有1个藤,它也会返回true。

忘了添加第一个代码块在一个名为

的类中
public class ListComparer :IEqualityComparer<Item>

1 个答案:

答案 0 :(得分:1)

所以你有一个像[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(a)相同。这可能是你当前绊倒的原因,因为你的代码没有提供这个,而Intersect方法将依赖它。