![]() |
Условие - любые два из всех
Привет!
Подскажите, пожалуйста, что-то я торможу. Есть несколько переменных. Понадобилось написать условие, в котором любые две переменные из набора должны быть равны 2, иначе тревога. Можно, конечно, и так написать: Код:
$1 = 4 Как грамотно написать условие? |
Массив, после его сортировка, после сравнение двух соседних элементов, если они равны, то прерывание и выход с "OK", при достижении конца массива выход с "Тревога!".
UPD: А Вам же только ДВОЙКИ считать? Тогда количество двоек в массиве и подсчитать. Читая тему "PowerShell - Условие - любые два из всех" подумалось, что любые две переменные имели бы одинаковые значения. |
Цитата:
Я вообще про Zabbix спрашиваю, как там теперь реализовать. |
Офф-топ кончено, но на Паскале это могло бы выглядеть, например, так:
Скрытый текст
Код:
const n=15; Осталось только на Powershell переложить :biggrin: |
Цитата:
Да, видать, только поиск в массиве. Код:
$1 = 2 Код:
sum(last(/Ramos Ultra/drycontactSensor[4]),last(/Ramos Ultra/drycontactSensor[6]),last(/Ramos Ultra/drycontactSensor[8]))<>8 |
Цитата:
Выше приведённый пример на Паскале демонстрирует это. |
Ну любых не подойдёт же. Если массив, например, 4444444211111, то это не сработает.
|
Цитата:
Скрытый текст
Код:
const n=15; Некоторые результаты: Скрытый текст
Код:
--- Код:
--- Код:
--- |
Можно использовать делегата сортировки массива (List), но там сравнение может быть не по порядку, в зависимости от алгоритма сортировки.
Код:
$1 = 4 |
Я так понимаю, что эффективнее всего выцеплять из массива нужные значения и потом подсчитывать их количество. Или нет?
|
DJ Mogarych, Ни разу не писал здесь посты в PowerShell - далёк от него.
Цитата:
Код:
$1 = 222 Код:
$1 = 4 |
судя по условию, если любые две переменные не равны двум, то "тревога". Для тревоги находим первую пару переменных, которые все не 2. Непонятно, для чего нужен полный перебор пар переменных, и нужен ли. Если хотя бы две из набора не равны 2, то при полном переборе они встретятся.
|
megaloman, интересный подход, спасибо.
Sham, условие такое - из всех переменных две обязательно должны быть равны 2, иначе тревога. |
Цитата:
Непонятно было по первому посту. Цитата:
Вы выше говорили, что не только равны между собою, но и ещё конкретному значению?! 2 Вы приводили лишь только в качестве конкретного примера, не так ли? |
|
тогда можно и так, наверное
Код:
(get-variable | where {$_.Name -match '^\d+$' -and $_.Value -eq 2}).Length |
Цитата:
UPD: Как Мне кажется, предварительной сортировкой массива удобней пользоваться, т.к., зачастую, уже имеется готовый функционал, полагаю и в powershell тоже. Ну, а на выходе Мы уже имеем "подготовленный" массив, в котором уже достаточно сравнить только два соседних элемента - (i) и (i+1). |
Цитата:
Код:
$a = 1 Код:
$a = 22 |
Цитата:
Код:
$1,$2,$3,$4,$5,$n = 4,4,2,6,7,8 |
Код:
$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11 = 1, 32, 3.141526, 4, 5, 2, 754, 3.141526, 2, 398, 222 Код:
$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11 = 1, 32, 3.1415264, 4, 5, 2, 754, 3.141526, 2, 398, 222 |
Ну да, делать массив, потом считать.
Всем спасибо! |
Время: 18:17. |
Время: 18:17.
© OSzone.net 2001-