检查数组是否包含来自另一个数组的任何项目

给定2个int数组,例如foo和bar,检查数组栏包含至less一个foo包含的项目的最有效方法是什么? 应该返回true / false。

即时通讯怀疑嵌套的foreach,但只是想知道如果这是一个更好的方法。

使用LINQ:

array1.Intersect(array2).Any() 

C#3:

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

C#4并行执行:

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

是嵌套循环,尽pipe隐藏了一个循环:

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

对于一次随机数组的方法,你的方法似乎是最快的。 如果一个或两个matrix是sorting的,它们的上下界是已知的,或者其中一个matrix比另一个matrix变化的方式更less,并且执行了许多检查,那么有些方法可以使它更高效。 事情是你可以准备各种散列,索引和提示,将优化search到几乎没有,但索引的过程通常会采取多个单一的search。