Ассоциативные массивы (Map)

Ассоциативные массивы (Map)

В LeekScript существуют «классические» массивы типа «Array» и ассоциативные массивы типа «Map».

Этот несколько особенный вид массива помогает решить такую задачу: предположим, я хочу сохранить характеристики своего лука-порея — силу, мудрость, сопротивление и т. д. Я сделал массив:

var monPoireau = []; push(monPoireau, getStrength()); push(monPoireau, getWisdom()); push(monPoireau, getResistance());

Теперь моя проблема в том, что нужно помнить: сила лежит в 1-й ячейке, мудрость — во 2-й, сопротивление — в 3-й... Прямо сейчас это ещё ничего, но через 2 недели я всё напрочь забуду!

Решение: вместо того чтобы нумеровать ячейки, было бы куда разумнее дать им понятные имена. И это возможно — так работают ассоциативные массивы!

var monPoireau = [:]; monPoireau["force"] = getStrength(); monPoireau["sagesse"] = getWisdom(); monPoireau["resistance"] = getResistance(); debug( monPoireau ); // Выведет что-то вроде ["force" : 150, "sagesse" : 20, "resistance" : 95] debug( monPoireau["force"] ); // Выведет 150

Понятные имена (их называют ключами) здесь — "force", "sagesse" и "resistance". В этом примере видно, как их объявлять и как ими пользоваться. Ключами могут быть целые числа или строки.

Удобно! Но как тогда перебрать ассоциативный массив?

Следующий цикл:

for (var k = 0; k maMap = [:];

В строгом режиме такая типизация обязательна: для Map, объявленной просто как var m = [:], вставки не компилируются (ошибка типа), тогда как для Map они допускаются.

Затем map можно перебрать так:

for (string maCle : integer maValeur in maMap) { debug("Pour la clé " + maCle + " la valeur qui correspond est " + maValeur); }

Теперь ваша очередь ими пользоваться. Вот увидите: стоит научиться — и без них уже не обойтись!