У меня возникли проблемы с выяснением того, как получить длину матрицы внутри матрицы внутри матрицы (вложенная глубина 3). Итак, что делает код вкратце ... смотрит, есть ли издатель уже в массиве, то он либо добавляет новый столбец в массив с новым издателем, либо соответствующей системой, либо добавляет новую систему в существующий массив издательДлина вложенного массива lua
output[k][1]
является массив издателя output[k][2][l]
является системой
где первым [] представляет собой количество различных издателей и второе [] является количеством различных систем в пределах того же издатель
Итак, как бы я узнал, какова длина третьего глубокого массива?
function reviewPubCount()
local output = {}
local k = 0
for i = 1, #keys do
if string.find(tostring(keys[i]), '_') then
key = Split(tostring(keys[i]), '_')
for j = 1, #reviewer_code do
if key[1] == reviewer_code[j] and key[1] ~= '' then
k = k + 1
output[k] = {}
-- output[k] = reviewer_code[j]
for l = 1, k do
if output[l][1] == reviewer_code[j] then
ltable = output[l][2]
temp = table.getn(ltable)
output[l][2][temp+1] = key[2]
else
output[k][1] = reviewer_code[j]
output[k][2][1] = key[2]
end
end
end
end
end
end
return output
end
код был зафиксирован здесь в будущем: http://codepad.org/3di3BOD2#output
Где '' ltable' и temp' объявили? Поскольку они теперь появляются в вашем коде, кажется, что они являются глобальными переменными. Забыли ли вы добавить ключевое слово 'local' перед ними или в своем дизайне они действительно глобальные? –
@ user2872731 Длина *, которая одна * из таблиц на 3-м уровне? – dualed
Я бы рекомендовал использовать дескриптивные строки вместо магических чисел. Наличие поля, называемого 'output [k] .publisher' и подтаблицы' output [k] .reviewer_codes', сделает ваш код намного чище и ваша жизнь станет проще. – kikito