How to check if an array contains any item of another array

C#Arrays

C# Problem Overview


Given 2 int arrays e.g, foo and bar, what's the most efficient way to check that the array bar contains at least one item that foo contains. should return true/false.

I'm suspecting nested foreach but just wondering if there's a nicer way?

C# Solutions


Solution 1 - C#

Using LINQ:

array1.Intersect(array2).Any()

Note: Using Any() assures that the intersection algorithm stops when the first equal object is found.

Solution 2 - C#

C#3:

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

C#4 parallel execution:

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

Solution 3 - C#

Yes nested loops, although one is hidden:

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

Solution 4 - C#

Another solution:

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

If you have class instead of built in datatypes like int etc, then need to override Override Equals and GetHashCode implementation for your class.

Solution 5 - C#

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, 16, 5, 7, 6, 56 };
    int k = 0;
    for (int i = 0; i < arr1.Length; i++)
    {

        for (int j = 0; j < arr2.Length; j++)
        {

            if (arr1[i] == arr2[j])
            {
                k++;
                break;
            }

        }

    }
    if (arr1.Length == k)
    {
        Console.WriteLine(true);
    }
    else
        Console.WriteLine(false);
}
----

Solution 6 - C#

For one-shot random-array approach, your method seems to be the fastest. There are methods that would make it way more efficient if one or both matrices are sorted, their upper/lower bounds are known, or one of them changes way more rarely than the other one and you perform many checks. Thing is you can prepare various hashes, indices and hints that will optimize the search to nearly nothing, but the process of indexing alone will usually take more than a single search.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionraklosView Question on Stackoverflow
Solution 1 - C#OlliView Answer on Stackoverflow
Solution 2 - C#Alex BagnoliniView Answer on Stackoverflow
Solution 3 - C#James CurranView Answer on Stackoverflow
Solution 4 - C#GauravsaView Answer on Stackoverflow
Solution 5 - C#ilir jusufiView Answer on Stackoverflow
Solution 6 - C#SF.View Answer on Stackoverflow