Есть такой вопрос.
К примеру есть массив что то вроде этого
settings = {
[common] = {
[_KIND] = 2, -- для демо счета 0
-- для реальных торгов 2
[TRADE_ACC] = "0123456789", -- торговый счет
[CLIENT_CODE] = "0123456", -- код клиента
}
[individual] = {
[SEC] = {
"RUAL",
"AFKS",
}
[CLASS] = {
"TQBR",
"TQBR",
}
[uniq_trans_id] = {
0x20000
0x21000
}
}
}
и есть колбэк в котором я могу получить sec_code
function OnDepoLimit(dlimit)
end
Теперь внутри функции надо как то сравнить элементы массива SEC с элементом таблицы dlimit.sec_code и при совпадении значений действовать. Самое очевидное решение, это перебор... Выглядит топорно, а хочется эстетики
Поэтому ищу более изящное и быстрое решение в qlua. Поясню.
Допустим приходит колбэк и значение dlimit.sec_code будет равно "AFKS". И вот тут приходит мысль, а если не сравнивать? если каким то чудом значение превратить в индекс? Тогда из settings.individual.uniq_trans_id["AFKS"] получить значение 0x21000? Это первый набросок самой программы.
Мне уже здесь советовали "ассоциативные массивы", и по моему это именно то, что нужно в данном случае. Т.е. все, что было написано выше это все не то. Напрашиваются именно ассоциативные массивы, но пока пазлы как то не складываются полностью. Т.к. допустим инструментов у меня будет... Ну пусть 50 потом, а пока всего на двух потренироваться достаточно. Тогда немного переписываем
Table = {}
RUAL = "RUAL"
AFKS = "AFKS"
Ну вот оно вроде. Теперь если проинициализировать оба значения таблицы,
Table[RUAL] = 1
Table[AFKS] = 2
-- Ну или если избавиться от ненужных переменных, то
Table["RUAL"] = 1
Table["AFKS"] = 2
мы сможем обращаться к нужному элементу по
a = Table[dlimit.sec_code]
и тогда, в случае если dlimit.sec_code окажется "AFKS", то в а мы получим 2.
НО! Для каждого элемента Table нужны еще два массива, первый будет общий для всех элементов
_KIND = 2
TRADE_ACC = "0123456789" -- торговый счет
CLIENT_CODE = "0123456" -- код клиента
А второй уже каждый индивидуально для каждого элемента массива Table
CLASS = "TQBR"
trigger_1 = 0
trigger_2 = 0
percent = 0
portfolio = 0
uniq_trans_id = 0x37000
Block_sell_Case = 0
Вот здесь то и засада, как это реализовать я не допонимаю. Причем доступ уже к этим элементам массива надо организовать через индекс "RUAL" или "AFKS". Чую это очень просто, но либо у меня представление о таких массивах хромает(а оно действительно даже не хромает, а еще даже не ходит), либо изначально ошибка...