2017-02-15 4 views
1

CSV 파일의 일부 데이터를 Lua 테이블로 구문 분석했습니다.Lua 중첩 테이블의 특정 데이터에 액세스하는 방법

는 이제 몇 시간 동안 다른 테이블에 저장하기 (아직 다른 데이터를 표시하지 않고) 모든 ID를 알고 싶은 테이블이

tab { 
    { id = 1761, anotherID=2, ping=pong} 
    { id = 2071, anotherID=4, ping=notpong} 
} 

이 단지 더 큰 것 같습니다 말할 수 있습니다.

내가 완전히 지금 여기를 손실하고는 ..

사용

나는 그것을 조금 재 작성하고 가지고 무슨 일이 있었는지 당신이 쓴 :

minitab = {} 
     for i, value in ipairs(tab) do 
      local id = value.id 
      local anotherID = value.anotherID 
      minitab[id] = anotherID 
     end 

것이라고 작업을? 사실 나는 나중에 큰 배열 (약 30 datas) 방법의 단지 2 값을 얻고 싶습니다 -하지만 난 GUI 드롭 다운에 하나의 배열을 밀어 수 있습니다. ID를 키로 저장하고 "anotherID"값을 해당 키 다음의 텍스트로 지정하여 2071 번째 값을 묻는 경우 "이름"을 표시합니다 4

답변

0

아래 코드는 ID를 키로 저장합니다 다른 테이블에서 :

id={} 
for k,v in ipairs(tab) do 
    id[v.id]=true 
end 

그런 다음 ID를 나열하는 pairsid을 통과 할 수 있습니다.

각 ID의 출처를 기억하려면 루프에서 id[v.id]=k을 사용하십시오.

+0

k와 v를 i, value로 바꿨습니다. - 이제 minitab {1761 = 2, 2071 = 4}의 테이블 형식으로 2 개의 변수를 저장하려면 어떻게해야합니까? 코멘트를 편집 할거야, 코멘트 코드는 좋지 않다 : D –

0

당신의 질문을 바탕으로, 당신은 당신의 데이터 테이블 tab을 통과하고 minitab를 얻기 위해이 코드를 사용할 수있는 GUI 배열에 사용되는 : 그러나

--data 
tab = { 
    {id = "4204", label = "2", desc = "Roancyme"}, 
    {id = "5517", label = "9", desc = "Bicktuft"}, 
    {id = "1035", label = "3", desc = "Pipyalum"}, 
} 

--temporary table 
local minitab = {} 
for i, option in ipairs(tab) do 
    minitab[option.id] = option.label 
end 

--print minitab 
print('<select>') 
for id, label in pairs(minitab) do 
    print(string.format('<option value="%s">%s</option>', id, label)) --> <option value="1035">3</option> 
end 
print('</select>') 
print() 

, 나는 그것을 만들 필요가 생각하지 않습니다 원래 테이블 tab을 쉽게 탐색 할 수 있고 필요한 출력을 직접 추출 할 수 있기 때문에 이러한 값을 저장하는 임시 테이블. 같은 :

--print directly from tab 
print('<select>') 
for i, option in ipairs(tab) do 
    print(string.format('<option value="%s">%s</option>', option.id, option.label)) --> <option value="1035">3</option> 
end 
print('</select>') 
print() 

당신이 드롭 다운 목록을 표시하기 전에 함께 작업을해야하지 않는 한 (예를 들어 라벨 등을 기준으로 정렬의 labelminitab 일부 접두사를 추가) 원래 데이터 테이블 tab을 방해하고 싶지는 않습니다. 이 경우 임시 테이블을 사용하는 것이 좋습니다.

--format values in temporary table 
local minitab = {} 
for i, option in ipairs(tab) do 
    local minitabID = option.id 
    local minitabLabel = string.format('Item %s - %s', option.label, option.desc) 
    table.insert(minitab, {id = minitabID, label = minitabLabel}) 
end 

--sort temporary table 
table.sort(minitab, function (o1, o2) return o2.label > o1. label end) 

--print formatted values from temporary table 
print('<select>') 
for i, option in ipairs(minitab) do 
    print(string.format('<option value="%s">%s</option>', option.id, option.label)) --> <option value="4204">Item 2 - Roancyme</option> 
end 
print('</select>') 

NB : 테이블 반복 ipairs를 사용하는 한이 pairs를 사용하는 메모를 확인하시기 바랍니다. 전체 코드 스 니펫 here을 참조하십시오.