2013-10-11 2 views
3

У меня возникли проблемы с выяснением того, как получить длину матрицы внутри матрицы внутри матрицы (вложенная глубина 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

+0

Где '' ltable' и temp' объявили? Поскольку они теперь появляются в вашем коде, кажется, что они являются глобальными переменными. Забыли ли вы добавить ключевое слово 'local' перед ними или в своем дизайне они действительно глобальные? –

+0

@ user2872731 Длина *, которая одна * из таблиц на 3-м уровне? – dualed

+0

Я бы рекомендовал использовать дескриптивные строки вместо магических чисел. Наличие поля, называемого 'output [k] .publisher' и подтаблицы' output [k] .reviewer_codes', сделает ваш код намного чище и ваша жизнь станет проще. – kikito

ответ

3

Вы должны быть в состоянии заменить table.getn(t) с #t (это осуждается в Lua 5.1 и удалены в Lua 5.2); вместо этого:

ltable = output[l][2] 
temp = table.getn(ltable) 
output[l][2][temp+1] = key[2] 

попробовать это:

output[l][2][#output[l][2]+1] = key[2] 

или это:

table.insert(output[l][2], key[2]) 
Смежные вопросы