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

C# 如何检查一个数组是否包含另一个数组的任何项,c#,arrays,C#,Arrays,给定两个int数组,例如,foo和bar,检查数组栏是否至少包含foo包含的一项的最有效方法是什么。应该返回true/false 我怀疑nestedforeach,但只是想知道是否有更好的方法?使用LINQ: array1.Intersect(array2).Any() 注意:使用Any()可确保在找到第一个相等对象时相交算法停止。是嵌套循环,但其中一个循环是隐藏的: bool AnyAny(int[] A, int[]B) { foreach(int i in A) i

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

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

使用LINQ:

array1.Intersect(array2).Any()

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

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

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

C#4并行执行:

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

对于一次性随机数组方法,您的方法似乎是最快的。如果对一个或两个矩阵进行排序,它们的上/下界已知,或者其中一个矩阵的更改方式比另一个矩阵的更改方式更为罕见,并且您执行了许多检查,则有一些方法可以提高效率。问题是,您可以准备各种哈希、索引和提示,将搜索优化到几乎为零,但单独索引的过程通常需要不止一次搜索。

另一种解决方案:

var result = array1.Any(l2 => array2.Contains(l2)) == true ? "its there": "not there";
如果您有类而不是内置的数据类型,如int等,则需要覆盖类的重写
Equals
GetHashCode
实现。

static void Main(string[]args)
int[]arr1={16,48,40,32,5,7};
int[]arr2={48,32,16,40,56,72,16,16,16,16,5,7,6,56};
int k=0;
for(int i=0;i
这是家庭作业吗?数组是任意大还是小于100个元素?除了暴力,你还试过别的吗?不,这不是家庭作业!。。。我只是觉得这可能是一个很好的方法确保求交算法在找到第一个相等对象时停止。请记住,所有数组1都已枚举,因此如果可能的话,您可能希望将较短的数组作为数组1。我从未听说过求交方法,因此我必须查找它的功能:它基本上为您提供了在两个比较数组中找到的项的列表。使用任意运算符,你们就知道在这种情况下,array1和array2是否有任何相同的字符串。在我的例子中,foo是el的子字符串。所以,
bool result=bar.Any(el=>foo.Contains(el))不会给出所需的结果。有没有关于如何实现此查询的建议?在本例中,使用
Any()
Contains()
比其他方法更快;)。好的观点,但不清楚你在和谁说话,如果你包含一些与OP q或特定答案直接相关的代码,这会很有帮助。@G.Stoynev:我在和提问者说话,我相信他们应该是什么答案,我怀疑嵌套的“foreach”比较是否足够复杂,从而允许发布“一些代码”-除非OP使用我提到的“特殊条件”之一来限定问题,否则没有必要猜测是否适用-对于对两个数组进行单次检查的一般条件,我们对嵌套foreach一无所知是最好的解决方案。如果没有进一步的解释,发布代码对于一个案例来说似乎是非常专业化的,这并没有多大帮助。
var result = array1.Any(l2 => array2.Contains(l2)) == true ? "its there": "not there";