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

Переменные «mapping» сохраняют произвольные пары ключ-значение. Ключи и значения сохраняются в два массива: один для ключей и один для значений. Сопоставление с ключом: пара значения «one»: 1, «two»: 2, «three»: 3 выглядит следующим образом:

keyvalue
«one»1
«two»2
«three»3

Поиск значений для ключей осуществляется с помощью ключей. Ключи могут быть произвольного типа, а типы могут быть смешанными (таким образом используется не только один тип). В случае необходимости поиска значения для ключа «one», осуществляется поиск позиции ключа «one» в ключевом массиве и возвращается значение в этой позиции массива значений.

ЗначокПРИМЕР

Следующий пример демонстрирует создание сопоставления, как это описано выше, а также адресацию к определенному значению.

main()
{
mapping m;
m[«one»] = 1;
m[«two»] = 2;
m[«three»] = 3;

 DebugN(m[«one»]); //Выходное значение: 1
}

ПРИМЕЧАНИЕ

Также можно использовать сопоставление или «dyn_string» внутри сопоставления.

ЗначокПРИМЕР

Следующий пример показывает, как использовать сопоставление и «dyn_string» внутри сопоставления.

main()
{

mapping root;
 mapping child_map;
dyn_string child_dyn;

 child_map[«one»] = 1;
child_map[«two»] = 2;
child_map[«three»] = 3;

 child_dyn[1] = «one»;
child_dyn[2] = «two»;
child_dyn[3] = «three»;

 root[«c1»] = child_map;
root[«c2»] = child_dyn;

 DebugN(«root =>child1 =>element2:» + root[«c1»][«two»]); //Выходное значение: 2
DebugN(«root =>child2 =>element1:» + root[«c2»][1]); //Выходное значение: один
}

Преимущества и недостатки сопоставления по сравнению с «dyn_string»

Преимущества

  • быстрое время считывания при использовании большого количества записей

Недостатки

  • длительное время записи
  • необходим больший объем памяти

Функции сопоставления

mappingClear()mappingGetKey()mappingGetValue()
mappingHasKey()mappingKeys()mappinglen()
mappingRemove()  

Примеры функций сопоставления

ЗначокПРИМЕР 1

Доступ к сопоставлению с применением ключа.

int i;
mapping m;
m[«one»] = 1; //установка значения, равного 1
m[«two»] = 2; //установка значения, равного 2
DebugN(«The value of m[one]is=»+m[«one»], «the value should be=1»);
DebugN(«The value of m[two]is=»+m[«two»], «the value should be=2»);
i = m[«one»]; //установка i для значения «one»
DebugN(«i is=»+i, «i should be =1»);

ЗначокПРИМЕР 2

Вывод счетчика записей сопоставления с применением mappinglen().

DebugN(«mappinglen is» + mappinglen(m), «should be=2»);

ЗначокПРИМЕР 3

Вывод всех ключевых значений сопоставления с применением mappingKeys().

DebugN(«mappingKeys are=»+mappingKeys(m), «should be one and two as string»);

ЗначокПРИМЕР 4

Вывод ключевого значения определенного индекса в сопоставлении с применением mappingGetKey().

for(int i = 1; i <= mappinglen(m); i++)
DebugN(«mappingGetKey», i, «is=» + mappingGetKey(m, i));

ЗначокПРИМЕР 5

Вывод значения определенного индекса в сопоставлении с применением mappingGetValue().

for(int i = 1; i <= mappinglen(m); i++)
DebugN(«mappingGetValue», i, «is=» + mappingGetValue(m, i));

ЗначокПРИМЕР 6

Проверка наличия ключа сопоставления с применением mappingHasKey().

DebugN(«mappingHasKey one»,»is=» + mappingHasKey(m,»one»),»should be =TRUE»);

ЗначокПРИМЕР 7

Удаление записи с применением mappingRemove().

DebugN(«mappingRemove: one», «is=»+mappingRemove(m, «one»), «should be =0»);

dyn_mapping

«dyn_mapping» — это динамический список сопоставлений.

ЗначокПРИМЕР

Функция «getGroupsOfUserPVSS()» возвращает список сопоставлений (= «dyn_mapping«) с информационной группой выбранного пользователя. Пользователь «demo» располагается только в группе пользователей «guest» (гость), поэтому, в возвращаемой «dyn_mapping» содержится только сопоставление для этой группы.

main()
{
dyn_mapping m;
m = getGroupsOfUserPVSS(4098);
DebugN(«Groups of the user demo», m);
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *