如何检查数组是否包含另一个数组的任何项

给定2个int数组,例如foobar ,检查数组条包含至少一个foo包含的项的最有效方法是什么。 应该返回true / false。

我怀疑嵌套的foreach但只是想知道是否有更好的方法?

使用LINQ:

 array1.Intersect(array2).Any() 

注意:使用Any()确保在找到第一个相等对象时停止交集算法。

C#3:

 bool result = bar.Any(el => foo.Contains(el)); 

C#4并行执行:

 bool result = bar.AsParallel().Any(el => foo.AsParallel().Contains(el)); 

是嵌套循环,但有一个是隐藏的:

 bool AnyAny(int[] A, int[]B) { foreach(int i in A) if (B.Any(b=> b == i)) return true; return false; } 

对于一次性随机数组方法,您的方法似乎是最快的。 如果一个或两个矩阵被排序,它们的上/下界是已知的,或者其中一个变化比另一个更少,并且你执行了很多检查,那么有些方法可以提高效率。 事情是你可以准备各种哈希,索引和提示,将搜索优化到几乎没有,但单独索引的过程通常需要不止一次搜索。

另一种方案:

 var result = array1.Any(l2 => array2.Contains(l2)) == true ? "its there": "not there"; 

如果您有类而不是像int等内置的数据类型,那么需要为您的类重写Override EqualsGetHashCode实现。