Форум интернет-магазина Микрокомп
0 Список сравнения
0 Избранные товары
0
Страницы: 1
Как можно добавить к ассоциативному массиву произвольный элемент, RouterOS Scripting
 
Сломал всю голову! подскажите. Каким образом можно добавить в ассоциативный массив произвольную пару ключ-значение (полученное из переменных). Или даже проще - как можно присвоить массиву ассоциативное значение.
Код
{
 :local key "key";
 :local val "value";
 :local x {$key=$val};
 :put $x;
 :put ($x->"key");
 :foreach k,v in=$x do={:put ("$k=$v")}
}

вывод:
false

0=false

т.е. добавился нулевой элемент с логическим значением ($key=$vale) - это ложь
а как мне добавить ассоциативную пару значений?
 
Вот такая конструкция прокатывает: :local x {key=$val};
но как мне сделать так, чтобы key тоже бралось из переменной?
 
Все оказалось очень просто. С помощью set можно не только менять значение, но и добавлять элемент - если ключа не было в массиве!
Код
{
:local key1 "MyKey1";
:local key2 "MyKey2";
:local val1 "MyValue1";
:local val2 "MyValue2";
:local a ({});
# Dynamic add element! :-)
:set ($a->$key2) $val2;
:set ($a->$key1) $val1;

:put $a;
:put [:len $a];
:put ($a->$key1);
:put ($a->$key2);
}

Вывод:
Код
MyKey1=MyValue1;MyKey2=MyValue2
2
MyValue1
MyValue2

обратите внимание - элементы массива сортируются по ключам (как и написано в wiki)
Страницы: 1