Приветствую всех !
Элементарная задача - не знаю как решить:
Есть, например, массив данных:
:local list [:toarray "mama, papa, brat, sestra"];
Проверить элемент на вхождение в массив можно так:
:local Type "brat";
:foreach i in=$list do={ :if ($i=$Type) do={:log info "yes" } else={:log info "no";}
А как получить порядковый номер этого элемента в массиве ?
вывести номер искомого элемента массива
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Ну так что никто не знает ? Наверняка просто же ? Может перебрать массив каким другим видом цикла ?
Если кто знает - подскажите, пожалуйста ...
Если кто знает - подскажите, пожалуйста ...
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Дело в том что в случае с циклом "foreach i in=" в $i находится сам элемент массива, а не счетчик прохода по циклу. А где счетчик то хранитcя ?
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Пока ждал ответа от кого-нибудь придумал другой выход. Создается массив этих элементов с ключами-номерами к ним. Вот и все.
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Модератор
- Сообщения: 3605
- Зарегистрирован: 26 сен 2013, 14:20
- Откуда: НСК
- Контактная информация:
Sertik писал(а):Приветствую всех !
Элементарная задача - не знаю как решить:
Есть, например, массив данных:
:local list [:toarray "mama, papa, brat, sestra"];
Проверить элемент на вхождение в массив можно так:
:local Tipe "brat";
:foreach i in=$list do={ :if ($i=$Type) do={:log info "yes" } else={:log info "no";}
А как получить порядковый номер этого элемента в массиве ?
:global list [:toarray "mama, papa, brat, sestra"];
Без циклов проверяем вхождение
:if ([:len [find key=brat in=$list ]] > 0) do={:put "Yes"} else={:put "No"}
Собственно позиция
:put [find key=brat in=$list ]
Есть интересная задача и бюджет? http://mikrotik.site
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
vqd, спасибо, большое !
Тогда уж еще вопрос к Вам, как к гуру:
Как удалить элемент из массива - не обнулить его значение, а именно удалить вместе с ключом ?
И еще вопрос - откуда Вы это знаете ? (если не секрет, конечно). Существуют ли фирменные руководства по скриптовому языку Микротик, кроме Вики ?
Можете посоветовать источник ?
Тогда уж еще вопрос к Вам, как к гуру:
Как удалить элемент из массива - не обнулить его значение, а именно удалить вместе с ключом ?
И еще вопрос - откуда Вы это знаете ? (если не секрет, конечно). Существуют ли фирменные руководства по скриптовому языку Микротик, кроме Вики ?
Можете посоветовать источник ?
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
- podarok66
- Модератор
- Сообщения: 4361
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Код: Выделить всё
{
:local list [:toarray "mama, papa, brat, sestra"];
:set list ([:pick $list 0 2] , nil , [:pick $list 3 4]);
:put $list;
}
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
podarok66: как у Вас можно, но криво как то. Нужно знать позицию элемента в массиве и придется от нее pick-ать элементы. Должно быть изящнее ...
Но все равно, спасибо ! Решение рабочее.
Но все равно, спасибо ! Решение рабочее.
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Вот так, с помощью vqd и podarok66, получилось вроде универсально:
Из массива удаляется заданный элемент. Правда, верятно, если он в массиве не повторяется.
{
:local name "brat"
:local list [:toarray "mama, papa, brat, sestra"];
:local keynum [:find key=$name in=$list]
:put $list
:set list ([:pick $list 0 [:find key=$name in=$list]] , nil , [:pick $list ([:find key=$name in=$list]+1) [:len $list]]);
:put $list;
}
Еще проверю во всех вариантах. Спасибо, друзья !
Из массива удаляется заданный элемент. Правда, верятно, если он в массиве не повторяется.
{
:local name "brat"
:local list [:toarray "mama, papa, brat, sestra"];
:local keynum [:find key=$name in=$list]
:put $list
:set list ([:pick $list 0 [:find key=$name in=$list]] , nil , [:pick $list ([:find key=$name in=$list]+1) [:len $list]]);
:put $list;
}
Еще проверю во всех вариантах. Спасибо, друзья !
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
- podarok66
- Модератор
- Сообщения: 4361
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Sertik писал(а):Правда, верятно, если он в массиве не повторяется.
Если есть повтор, то удаляет первый из попавшихся:
Код: Выделить всё
{
:local list [:toarray "mama, papa, brat, sestra, brat"];
:local y [:len $list];
:local key [:find key=brat in=$list];
:put $list;
:set list ([:pick $list 0 $key], nil , [:pick $list ($key + 1) $y]);
:put $list;
}
mama;papa;brat;sestra;brat
mama;papa;sestra;brat
Тогда уж надо для удаления повторяющегося значения использовать такую связку:
Код: Выделить всё
{
:local list [:toarray "mama, papa, brat, sestra, brat"];
:put $list;
:foreach i in=$list do={
:if ($i="brat") do={
:local y [:len $list];
:local key [:find key=brat in=$list];
:set list ([:pick $list 0 $key], nil , [:pick $list ($key + 1) $y]);
:put $list;}}
}
mama;papa;brat;sestra;brat
mama;papa;sestra;brat
mama;papa;sestra
Что по поводу некрасивости моей первой конструкции, так я же вам направление решения показал, а не задачу решал в окончательном варианте...
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...