检查2个字符串数组中是否存在任何字符串

Eug*_*Lim 4 c#

检查2个数组中是否存在字符串的最简单方法是什么?p/s是否有LINQ方法来替换它?

// Old school method
bool result = false;
var stringArray1 = new string[] { "ABC", "EFG", "HIJ" };
var stringArray2 = new string[] {"123", "456", "ABC"};
for (var i = 0; i < stringArray1.Count; i++) {
    var value1 = stringArray1[i];
   for (var j = 0; j < stringArray2.Count; j++) {
       var value2 = stringArray2[j];
       if(value1 == value2)
           result = true;
   }
}
Run Code Online (Sandbox Code Playgroud)

AAA*_*ddd 7

对于区分大小写的搜索,您可以执行此操作

var result = stringArray1.Any(x => stringArray2.Contains(x));
Run Code Online (Sandbox Code Playgroud)

正如所回答的Intersect那样,这项工作也很顺利.

虽然你想要一个更强大的文化不敏感的版本

你可以用

var culture = new CultureInfo("en-US");
var result =  stringArray1.Any(x => 
                  stringArray2.Any(y => 
                      culture.CompareInfo.IndexOf(x, y, CompareOptions.IgnoreCase) >= 0));
Run Code Online (Sandbox Code Playgroud)

描述文本所用语言culture的实例在哪里CultureInfo


Joh*_*ica 6

您可以将两个数组相交,然后检查结果中是否有任何项:

var stringArray1 = new string[] { "ABC", "EFG", "HIJ" };
var stringArray2 = new string[] { "123", "456", "ABC" };
var result = stringArray1.Intersect(stringArray2).Any();
Run Code Online (Sandbox Code Playgroud)

如果您关心区分大小写,则可以传递a StringComparer作为第二个参数Intersect.例如:

var result = stringArray1.Intersect(stringArray2, StringComparer.OrdinalIgnoreCase).Any();
Run Code Online (Sandbox Code Playgroud)