Подтвердить что ты не робот

Как проверить, содержит ли массив какой-либо элемент другого массива

Учитывая 2 массива int, например foo и bar, наиболее эффективный способ проверить, что панель массива содержит хотя бы один элемент, который содержит foo. должен возвращать true/false.

Я подозреваю, что вложенный foreach но просто интересно, есть ли более хороший способ?

4b9b3361

Ответ 1

Использование LINQ:

array1.Intersect(array2).Any()

Примечание. Использование Any() гарантирует, что алгоритм пересечения останавливается при обнаружении первого равного объекта.

Ответ 2

С# 3:

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

Параллельное выполнение С# 4:

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

Ответ 3

Да вложенные петли, хотя один скрыт:

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

Ответ 4

Для метода одноразового случайного массива ваш метод кажется самым быстрым. Существуют методы, которые сделали бы его более эффективным, если бы одна или обе матрицы были отсортированы, их верхняя/нижняя граница известна или один из них изменяется реже, чем другой, и вы выполняете много проверок. Дело в том, что вы можете готовить различные хэши, индексы и подсказки, которые оптимизируют поиск почти до нуля, но процесс индексации сам по себе, как правило, занимает более одного поиска.

Ответ 5

Другое решение:

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

Если у вас есть класс вместо встроенных типов данных, таких как int и т.д., Тогда вам необходимо переопределить реализацию Override Equals и GetHashCode для вашего класса.