C# 如何检查一个数组是否包含#中另一个数组的一个或多个元素?
我有一个字符串数组:例如:C# 如何检查一个数组是否包含#中另一个数组的一个或多个元素?,c#,.net,C#,.net,我有一个字符串数组:例如: string [] names ={"P","A","B","G","F","K","R"} 我有另一个数组: string [] subnames={"P","G","O"} 我们如何检查names数组是否包含子names数组的任何元素 在上面的示例中,“p”和“G”在名称中都有。最简单的方法是使用该方法。然后对结果进行分析 bool containsValues = names.Intersect(subnames).Any(); 您可以使用一些Linq,然
string [] names ={"P","A","B","G","F","K","R"}
我有另一个数组:
string [] subnames={"P","G","O"}
我们如何检查names数组是否包含子names数组的任何元素
在上面的示例中,“p”和“G”在名称中都有。最简单的方法是使用该方法。然后对结果进行分析
bool containsValues = names.Intersect(subnames).Any();
您可以使用一些Linq,然后使用
Intersect
var commonNames = names.Intersect(subnames);
以下是一个Linq解决方案,它可以满足您的需求:
names.Any(x => subnames.Contains(x))
我认为Linq是最简单的:
from n1 in names
join n2 in subnames on n1 equals n2
select n1;
这也会起作用:
bool result = names.Any(subnames.Contains);
编辑
此代码可能看起来不完整,但实际上有效(方法组方法)。要检查是否有:
bool anyInBoth = names.Intersect(subnames).Any();
要在两者中都获得一个:
IEnumerable<string> inBoth = names.Intersect(subnames);
IEnumerable inBoth=names.Intersect(子名称);
bool DiziIcindeDiziVarMi(字符串[]父,字符串[]子)
{
int-say=0;
for(变量i=0;i
另一种方式:我分享如何检查一(多)个单词的部分和全部
string[] subnames = { "P", "G", "O" };
bool all = subnames.All(s => names.Contains(s));
bool anyInBoth = subnames.All(s => names.Contains(s));
啊,我更喜欢Gabe的答案:)嘿,至少你提供了另一个选项:)不..只是遇到了一个场景,我不想使用if条件。所以考虑寻找一个更快更好的approach@palakmehta:
如果条件
不接近。还有,什么是更好?在时间复杂度方面更好。这就是OP实际上问的“我们如何检查名称数组是否有子名称数组的元素”@TimSchmelter:你不认为这会产生这样的结果吗?或者将其反转,使其显示为subnames。任何(x=>names.Contains(x))
都将产生不同的结果?值得注意的是,此解决方案比使用intersect
方法的解决方案伸缩性差得多。结果应该是bool
“我们如何检查names数组是否包含subnames数组的任何元素?”@ TimSmithter认为这是读者的一个练习,采用一个90%的解决方案并完成它。如果,我只想返回布尔值。i、 e.如果名称数组有子名称数组的任何元素,那么我们应该在我输入布尔问题的解决方案时返回True-alse-false-been,其他人都知道了。只需检查结果的长度。@palakmehta:Servy的评论是一个寻宝游戏,您应该将注意力集中在斜体字上,并与之进行比较。subnames.Contains是一个没有使用括号或参数的函数。您还未能正确使用LINQ Any函数。到处都是虫子!这是有效的代码。它使用方法组方法。请在评论之前检查它是否运行。
string[] subnames = { "P", "G", "O" };
bool all = subnames.All(s => names.Contains(s));
bool anyInBoth = subnames.All(s => names.Contains(s));