检查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;
}
}
答案 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));
其中culture
是CultureInfo
的实例,用于描述用于编写文本的语言
答案 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();