Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查一个数组是否包含#中另一个数组的一个或多个元素?_C#_.net - Fatal编程技术网

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));