C# 使用LinQ代码检索bool结果

C# 使用LinQ代码检索bool结果,c#,linq,C#,Linq,如果比萨饼的成分存在于allIngred中,那么使用LINQ得到的结果将是true。我该怎么做呢 string[] allIngred = { "oil", "yeast", "wheat-flour", "salt", "oil", "baking-powder", "wheat-flour", "salt", "sugar", "milk" }; string[] pizza = { "oil", "yeast", "wheat-flour", "salt" }; Inte

如果比萨饼的成分存在于
allIngred
中,那么使用LINQ得到的结果将是
true
。我该怎么做呢

string[] allIngred = {
    "oil", "yeast", "wheat-flour", "salt", "oil", "baking-powder",
    "wheat-flour", "salt", "sugar", "milk"
};
string[] pizza = { "oil", "yeast", "wheat-flour", "salt" };
Intersect()
提供两个数组之间共享的所有成员,并且
SequenceEqual()
标识结果集是否与提供的参数相同(在这种情况下,您希望查看是否所有比萨饼配料都处于allIngred状态)

请注意,如果反转阵列,则这不一定有效:

bool result = allIngred.Intersect(pizza)…
因为
Intersect
的结果集将根据第一个参数排序,并且需要结果匹配
pizza

对于处理
IEnumerable
,如果不能保证排序,则显式添加排序会更安全:

bool result = pizza.Intersect(allIngred).OrderBy(x => x).SequenceEqual(pizza.OrderBy(x => x));

对于这个特定的需求,您可以通过在调用
Intersect()之后检查项的
Count()
来进行优化
pizza
数组的长度相对应。

您可以使用
All
Contains
方法的组合来检查
pizza
中的所有项目是否存在于
allIngred
中:

bool result = pizza.All(i => allIngred.Contains(i));

听起来你想用一些Linq的。这些会让你朝着正确的方向开始


特别是,请查看Linq的操作员。如果intersect的结果与您所关心的比萨饼的成分相等,那么您就知道您拥有所需的所有成分。

我不是100%确定您的意思,但我希望这有助于:

if (pizza.Intersect(allIngred).Count() == pizza.Count()){
     Console.WriteLine("All pizza ingredients exist");
}

虽然有几种可能的使用LINQ的方法,但其中一些方法比其他方法更昂贵。对于通常比交叉口和“所有”引道运行更快的引道,请尝试以下方法:

bool result = !pizza.Except(allIngred).Any();

当您想执行更多此类操作时,将这两个数组转换为HashSet将是一种更好的方法

ISet<string> allIngred = new HashSet<string>() { ... items ...};
ISet<string> pizza = new HashSet<string>() { ... items ... };

bool haveIngredients = pizza.IsSubset(allIngred);
ISet allIngred=new HashSet(){…items…};
ISet PIZA=new HashSet(){…items…};
bool have配料=比萨饼。Isubset(allIngred);
ISet<string> allIngred = new HashSet<string>() { ... items ...};
ISet<string> pizza = new HashSet<string>() { ... items ... };

bool haveIngredients = pizza.IsSubset(allIngred);