Страница 1 из 2
вывести номер искомого элемента массива
Добавлено: 15 янв 2018, 14:41
Sertik
Приветствую всех !
Элементарная задача - не знаю как решить:
Есть, например, массив данных:
: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";}
А как получить порядковый номер этого элемента в массиве ?
Re: вывести номер искомого элемента массива
Добавлено: 15 янв 2018, 19:01
Sertik
Ну так что никто не знает ? Наверняка просто же ? Может перебрать массив каким другим видом цикла ?
Если кто знает - подскажите, пожалуйста ...
Re: вывести номер искомого элемента массива
Добавлено: 15 янв 2018, 19:04
Sertik
Дело в том что в случае с циклом "foreach i in=" в $i находится сам элемент массива, а не счетчик прохода по циклу. А где счетчик то хранитcя ?
Re: вывести номер искомого элемента массива
Добавлено: 16 янв 2018, 13:40
Sertik
Пока ждал ответа от кого-нибудь придумал другой выход. Создается массив этих элементов с ключами-номерами к ним. Вот и все.
Re: вывести номер искомого элемента массива
Добавлено: 19 янв 2018, 14:47
vqd
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 ]
Re: вывести номер искомого элемента массива
Добавлено: 22 янв 2018, 21:50
Sertik
vqd, спасибо, большое !
Тогда уж еще вопрос к Вам, как к гуру:
Как удалить элемент из массива - не обнулить его значение, а именно удалить вместе с ключом ?
И еще вопрос - откуда Вы это знаете ? (если не секрет, конечно). Существуют ли фирменные руководства по скриптовому языку Микротик, кроме Вики ?
Можете посоветовать источник ?
Re: вывести номер искомого элемента массива
Добавлено: 22 янв 2018, 22:23
podarok66
Код: Выделить всё
{
:local list [:toarray "mama, papa, brat, sestra"];
:set list ([:pick $list 0 2] , nil , [:pick $list 3 4]);
:put $list;
}
Re: вывести номер искомого элемента массива
Добавлено: 22 янв 2018, 23:14
Sertik
podarok66: как у Вас можно, но криво как то. Нужно знать позицию элемента в массиве и придется от нее pick-ать элементы. Должно быть изящнее ...
Но все равно, спасибо ! Решение рабочее.
Re: вывести номер искомого элемента массива
Добавлено: 22 янв 2018, 23:29
Sertik
Вот так, с помощью 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;
}
Еще проверю во всех вариантах. Спасибо, друзья !
Re: вывести номер искомого элемента массива
Добавлено: 23 янв 2018, 16:18
podarok66
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
Что по поводу некрасивости моей первой конструкции, так я же вам направление решения показал, а не задачу решал в окончательном варианте...