【发布时间】:2020-03-22 14:14:55
【问题描述】:
我开始比较我的小项目的列表。到目前为止,我可以比较是否存在相同的项目,或者该项目的一个值是否适合另一个列表项目的相同值。 Atm Im 比较两个列表中的名称。我更改了一些我找到的代码。
public class TestResources
{
public string Name;
public int Amount;
public TestResources(string name, int amount)
{
Name = name;
Amount = amount;
}
}
TestResources[] ListResInStock = { new TestResources("wood", 1000), new TestResources("stone", 1000), new TestResources("sand", 1000), new TestResources("water", 1000) };
TestResources[] ListResNeeded = { new TestResources("wood", 800), new TestResources("stone", 800), new TestResources("sand", 375) };
private bool ContainsResourceName(IEnumerable<TestResources> ListResNeeded, IEnumerable<TestResources> ListResInStock)
{
bool result;
var list1WithName = ListResNeeded.Select(s => s.Name).ToList();
var list2WithName = ListResInStock.Select(s => s.Name).ToList();
result = !list1WithName.Except(list2WithName).Any();
return result;
}
函数被调用:
Console.WriteLine("ListResInStock contains ListResNeeded: ===> " + ContainsResourceName(ListResNeeded, ListResInStock) + " <==="); // True
Console.WriteLine("ListResNeeded contains ListResInStock: ===> " + ContainsResourceName(ListResInStock, ListResNeeded) + " <==="); // False
现在我想更改它,以便它只返回 true,如果 ressNeeded 的名称在那里并且 ressInStock 的数量 >= RessNeeded 的数量(当然对于所有资源)。
另外,如果你能详细解释这部分 var list1WithName = ListResNeeded.Select(s => s.Name).ToList(); 我会很好,因为我不能 100% 确定它是做什么的。
非常感谢您的帮助:-)
【问题讨论】:
-
LINQ 方法
Except默认情况下使用 DefaultComparer 处理原始类型,因此您将列表投影到字符串列表(原始类型)并使用 DefaultComparer,传入您自己的比较器实现IComparer 接口。