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データ)のちょうど2つの値を取得したい - しかし、私は1つの配列をGUIのドロップダウンにプッシュすることができます。 IDをキーとして保存し、そのキーの後のテキストになる「anotherID」値を保存したいので、2071番目の値を尋ねると「名前」が表示されます4

答えて

0

以下のコードは、別のテーブルに:

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に置き換えました。 - 2つの変数をminitab {1761 = 2、2071 = 4}のテーブル形式で保存したい場合、どうすればよいでしょうか?コメントを編集するつもりはない、コメントコードは良くない: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:1がpairsを使用するテーブルの反復がipairsを使用する上で注意を取るとしてください。完全なコードスニペットhereを参照してください。

関連する問題