![]() |
Перебор массивов
Вроде простая задача но никак не могу найти достаточно лаконичного решения
Есть два массива При переборе первого массива, если его значение совпадает с любым из значений второго массива, выполняется действие наверное решений много, буду признателен если поделитесь разными способами |
c4uran, в общих чертах — пара алгоритмов, чисто для понимания:
Тупой способ — прочитать первое значение первого массива, а затем сравнивать его со значениями массива методом полного перебора этого второго. Если при каком-то из сравнений совпадение есть — выполнить действие и перейти к следующему элементу первого массива прервав сравнение текущего, если же совпадения нет — по исчерпании второго массива перейти ко следующему элементу первого массива и повторить. Метод очень нерационален: время исполнения зависит от количества элементов массивов квадратично. Более интеллектуально (время поиска зависит от количества элементов почти линейно) — из второго массива создать вспомогательный, упорядочив в нем элементы по возрастанию — и далее сравнивать методом половинного деления вспомогательного массива: если элемент первого, соответствующий [примерно] среднему элементу второго, меньше — то на следующем шаге брать середину верхней половины вспомогательного, если больше — середину нижней половины, и т.д., каждый раз отсекая уже проанализированные ненужные половинки. При совпадении же — выполнить действие и перейти к следующему элементу первого массива, прервав сравнение текущего. Или проиндексировав второй массив — что по времени поиска даст примерно одно и то же. Ох, сейчас корифеи бить будут... |
Код:
$a = 1,2,3 |
Цитата:
Медленнее по сравнению с копированием массива, сортировкой и последующим поиском он станет на довольно большом количестве элементов, а там может ещё и памяти не хватить. |
Busla, это всегда так: выбор наиболее эффективного метода зачастую зависит от нашего знания о деталях реализации конкретных сущностей, над которыми мы планируем производить ту или иную операцию.
|
Как я понимаю, это "тупой" способ:
Код:
$arr1 | % { if ($_ -in $arr2) { $_ } } |
Время: 23:12. |
Время: 23:12.
© OSzone.net 2001-