Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Перебор массивов

Ответить
Настройки темы
PowerShell - Перебор массивов

Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Вроде простая задача но никак не могу найти достаточно лаконичного решения

Есть два массива

При переборе первого массива, если его значение совпадает с любым из значений второго массива, выполняется действие

наверное решений много, буду признателен если поделитесь разными способами

Отправлено: 09:58, 06-10-2018

 
mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


c4uran, в общих чертах — пара алгоритмов, чисто для понимания:

Тупой способ — прочитать первое значение первого массива, а затем сравнивать его со значениями массива методом полного перебора этого второго. Если при каком-то из сравнений совпадение есть — выполнить действие и перейти к следующему элементу первого массива прервав сравнение текущего, если же совпадения нет — по исчерпании второго массива перейти ко следующему элементу первого массива и повторить.

Метод очень нерационален: время исполнения зависит от количества элементов массивов квадратично.

Более интеллектуально (время поиска зависит от количества элементов почти линейно) — из второго массива создать вспомогательный, упорядочив в нем элементы по возрастанию — и далее сравнивать методом половинного деления вспомогательного массива: если элемент первого, соответствующий [примерно] среднему элементу второго, меньше — то на следующем шаге брать середину верхней половины вспомогательного, если больше — середину нижней половины, и т.д., каждый раз отсекая уже проанализированные ненужные половинки. При совпадении же — выполнить действие и перейти к следующему элементу первого массива, прервав сравнение текущего.

Или проиндексировав второй массив — что по времени поиска даст примерно одно и то же.

Ох, сейчас корифеи бить будут...

-------
Mikhail Zhilin


Последний раз редактировалось mwz, 06-10-2018 в 11:16.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:09, 06-10-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$a = 1,2,3
$b = 3,4,5

Compare-Object $a $b -IncludeEqual -ExcludeDifferent

InputObject SideIndicator
----------- -------------
          3 ==

$r = Compare-Object $a $b -IncludeEqual -ExcludeDifferent
if($r) {
    "Код"
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:21, 06-10-2018 | #3


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата mwz:
Метод очень нерационален »
спорно:
Медленнее по сравнению с копированием массива, сортировкой и последующим поиском он станет на довольно большом количестве элементов, а там может ещё и памяти не хватить.

Последний раз редактировалось Busla, 06-10-2018 в 11:59.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:52, 06-10-2018 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

Отправлено: 12:34, 06-10-2018 | #5


Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Как я понимаю, это "тупой" способ:

Код: Выделить весь код
$arr1 | % { if ($_ -in $arr2) { $_ } }
А можно пример более интеллектуального?

Отправлено: 18:45, 06-10-2018 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Перебор массивов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2003/XP/2000 - [решено] Обработка массивов Матвик Microsoft Office (Word, Excel, Outlook и т.д.) 3 06-04-2011 12:52
VBA - [решено] Обработка массивов Матвик Программирование и базы данных 12 24-02-2011 16:25
Теория - Комбинированный поиск массивов Drago56 Программирование и базы данных 8 22-12-2010 22:59
Перебор контролов w3d1 AutoIt 8 04-09-2009 12:35
Перебор в твиках! lmn Автоматическая установка Windows 2000/XP/2003 2 30-07-2005 02:47




 
Переход