2012-02-18 5 views
-1

나는 루아와 함께 프로그램을 쓰고있다. 나는 다음과 같은 방법으로 조직 된 데이터가 : 데이터의 각 그룹이 두 변수 내가 & 페이지 색인 또 다른 방법으로테이블에서 데이터에 액세스하는 방법은 무엇입니까?

t= { 
    i1 = { 
     p1 = { value = "i1p1" }, 
     p2 = { value = "i1p2" }, 
     -- etc 
     pm = { value = "i1pm" } 
    }, 
    i2 = { 
     p1 = { value = "i2p1" }, 
     p2 = { value = "i2p2" }, 
     -- etc 
     pm = { value = "i2pm" } 
    }, 
    im = { 
     p1 = { value = "imp1" }, 
     p2 = { value = "imp2" }, 
     -- etc 
     pm = { value = "impm" } 
    } 
} --(inner tables) 

을, 나는 데이터가 올바르게 유지 확신하지만 난 방법은을 인쇄 할 테이블에있는 데이터는 i와 p의 값을 반복 할 수 없기 때문에 알 수 없으므로 n & m lua로 이것을 수행하는 방법을 알고 있습니까? 당신이 당신의 중첩 된 (내부) 테이블의 깊이를 알고있는 경우

+0

나는 당신이 무엇을 요구하고 있는지 이해하는 데 어려움을 겪고 있습니다. 당신이하려고하는 것에 대해 더 명확하게 질문을 재구성 할 수 있습니까? –

+1

바로 가기 표기법'f {} == f ({})'로 많은 함수 호출을 보았습니다 ... 예제 코드를 올 바르고 올바르게 형식화하려고 시도했을 수 있습니다. – jpjacobs

답변

1

, 그 깊이에 명시 적으로 반복 할 수

function print_tbl(tbl) 
    if type(tbl) == "table" then 
     for _,v in pairs(tbl) do 
      print_tbl(v) 
     end 
    else 
     print(tbl) 
    end 
end 

print_tbl(t) 

:

for k1,v1 in pairs(t) do 
    for k2,v2 in pairs(v1) do 
     for k3, v3 in pairs(v2) do 
      print(k3, ":", v3) 
     end 
    end 
end 

다른 방법으로, 재귀 중첩 된 구조로 반복 할 수 이것은 단지 예일뿐입니다. 테이블에 함수가 있거나 사용자 데이터가 포함되어 있거나 중첩에 순환이 있으면 다른 접근 방식이 필요합니다. 루아 사용자 위키에서 table serialization을보세요. 직렬화는 네 스팅, 함수, 사이클 등이있는 테이블을 현명하게 처리해야합니다. 데이터에서 얻은 교훈을 사용할 수 있습니다.

관련 문제