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

时间:2018-04-04 04:22:37

标签: 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;
   }
}

2 个答案:

答案 0 :(得分:7)

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

var result = stringArray1.Any(x => stringArray2.Contains(x));

正如回答Intersect所做的工作也很顺利。

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

您可以使用

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

其中cultureCultureInfo的实例,用于描述用于编写文本的语言

答案 1 :(得分:6)

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

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

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

var result = stringArray1.Intersect(stringArray2, StringComparer.OrdinalIgnoreCase).Any();