如何检查数组是否包含另一个数组的任何项
给定2个int数组,例如foo
和bar
,检查数组条包含至少一个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 Equals
和GetHashCode
实现。