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

前端 未结 6 1252
南方客
南方客 2021-01-31 07:35

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 re

相关标签:
6条回答
  • 2021-01-31 07:55
    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);
    }
    ----
    
    0 讨论(0)
  • 2021-01-31 07:58

    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.

    0 讨论(0)
  • 2021-01-31 08:01

    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.

    0 讨论(0)
  • 2021-01-31 08:05

    Using LINQ:

    array1.Intersect(array2).Any()
    

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

    0 讨论(0)
  • 2021-01-31 08:09

    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;
    }
    
    0 讨论(0)
  • 2021-01-31 08:11

    C#3:

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

    C#4 parallel execution:

    bool result = bar.AsParallel().Any(el => foo.AsParallel().Contains(el));
    
    0 讨论(0)
提交回复
热议问题