function LogWrite(name, log_type, log_array)
local content = "";
local i = 1;
for key, value in pairs(log_array) do
content = content.."\t"..value..";";
content = string.gsub(content,"([.]+)",",");
i = i + 1;
end;
message(tostring(content));
end;
Массив считывается через цикл, но почему-то у него получается иная последовательность. На выходе ожидаю строку: 100; Si; -10; 10000; 1; По факту последовательность другая: Si; 1; 100; -10; 10000;
Иван написал: Мне хотелось бы в функцию передавать именно массив в таком виде (хэш-таблице). Но как тогда сохранить порядок ключей что передается?
В таком виде - никак. Сравните с сями, у вас либо структура и вы обращаетесь к элементам по имени (t.a, t.b) и вообще нет способа по ним итерировать, либо у вас массив и вы обращаетесь по индексу (t[0], t[1]) и имен никаких нет. Тут то же самое, либо имена (плюс еще и возможность в цикле по ним пройти, хоть и в непредсказуемом порядке, с помощью pairs), либо индексы и ipairs в заданном порядке.
Иван написал: Мне хотелось бы в функцию передавать именно массив в таком виде (хэш-таблице). Но как тогда сохранить порядок ключей что передается?
Вы можете создать метамод для такой таблицы, чтобы при вставке происходила сортировка по представлению ключа и сохранялась в внутренний отсортированный массив. Плюс надо создать итератор класса по внутренней таблице, выводящий значения. Но это сложная структура и удвоение памяти.
Для хранения проще всего создать отдельный массив ключей в нужном порядке. А уже перебирая его, получать значения в постоянном порядке.
Иван написал: LogWrite("report", comment, {Trade=100, Code=Si, Q="-"..10, Price=10000, Pips=1}); В функции делаю чтение массива:Код function LogWrite(name, log_type, log_array)
local content = ""; local i = 1; for key, value in pairs(log_array) do content = content.."\t"..value..";"; content = string.gsub(content,"([.]+)",","); i = i + 1; end; message(tostring(content));
end;
function LogWrite(name, log_type,t) local content = ""; local i = 1; for m=1,#t do local value=tostring(t[m]) content = content.."\t"..value..";"; content = string.gsub(content,"([.]+)",","); i = i + 1; end; message(tostring(content)); end; local Si=123 LogWrite("report", "", {100,Si,"-"..10,10000,1}); ------------------- 100; 123; -10; 10000; 1; >Exit code: 0
Иван написал: LogWrite("report", comment, {Trade=100, Code=Si, Q="-"..10, Price=10000, Pips=1}); В функции делаю чтение массива:Код function LogWrite(name, log_type, log_array)
local content = ""; local i = 1; for key, value in pairs(log_array) do content = content.."\t"..value..";"; content = string.gsub(content,"([.]+)",","); i = i + 1; end; message(tostring(content));
end;
function LogWrite(name, log_type,t) local content = ""; local i = 1; for m=1,#t do local value=tostring(t[m]) content = content.."\t"..value..";"; content = string.gsub(content,"([.]+)",","); i = i + 1; end; message(tostring(content)); end; local Si=123 LogWrite("report", "", {100,Si,"-"..10,10000,1}); ------------------- 100; 123; -10; 10000; 1; >Exit code: 0