2013-10-11 1 views
3

행렬 내에서 행렬의 길이를 가져 오는 방법을 알아내는 데 어려움이 있습니다 (중첩 된 깊이 3). 코드가 간략히 설명하는 것은 ... 게시자가 이미 배열에 있는지 확인한 다음 배열에 새 게시자와 해당 시스템이있는 새 열을 추가하거나 새 게시자와 해당 시스템을 추가합니다. 어레이 출판사중첩 배열 길이 loo

output[k][1]이 존재하는 동일한 발행자 내의 다양한 시스템의 양에있어서, 상기 제 []를 다른 게시자 의 양 [제 2 인

게시자 어레이 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

당신은 #ttable.getn(t) (는 루아 5.1에서 사용되지 루아 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])