13

我有一个字符串数组:例如:

string [] names ={"P","A","B","G","F","K","R"}

我有另一个数组:

string [] subnames={"P","G","O"}

我们如何检查名称数组是否包含子名称数组的任何元素。

在上面的示例中,名称中有“P”和“G”。

4

8 回答 8

31

这是一个 Linq 解决方案,应该可以满足您的需求:

names.Any(x => subnames.Contains(x))
于 2012-06-21T13:40:27.117 回答
19

最简单的方法是使用Enumerable.Intersect方法。然后我们对结果使用Any方法

bool containsValues = names.Intersect(subnames).Any();
于 2012-06-21T13:39:16.613 回答
8

这也可以:

bool result = names.Any(subnames.Contains);

编辑

这段代码可能看起来不完整,但它确实有效(方法组方法)。

于 2012-06-21T13:42:45.150 回答
4

你可以使用一些 Linq 然后使用Intersect

var commonNames = names.Intersect(subnames);
于 2012-06-21T13:39:28.987 回答
2

检查是否有:

bool anyInBoth = names.Intersect(subnames).Any();

要同时获得两者:

IEnumerable<string> inBoth = names.Intersect(subnames);
于 2012-06-21T13:46:35.110 回答
0

Linq 是我认为最简单的:

from n1 in names
join n2 in subnames on n1 equals n2
select n1;
于 2012-06-21T13:41:18.893 回答
0
bool DiziIcindeDiziVarMi(string[] parent, string[] child)
{
     int say = 0;
     for (var i = 0; i < child.Length; i++)
        for (var j = 0; j < parent.Length; j++)
           if (child[i] == parent[j])
                say++;

        return say == child.Length;

}
于 2019-06-22T22:23:27.520 回答
0

另一种方式:我分享如何检查一个(几个)单词部分和所有

string[] subnames = { "P", "G", "O" };
    
bool all = subnames.All(s => names.Contains(s));
bool anyInBoth = subnames.All(s => names.Contains(s));
于 2021-06-01T08:53:36.823 回答