2016-10-26 11 views
1

私はLuaとプログラミング一般にはかなり新しいです。私はtable.insertをネストしたテーブルのために使う方法を考えていました。これまでのところこれまで書いたことはありますが、ネストしたテーブルには何も挿入されません。入れ子になったテーブルに値を挿入する

days = {d1 = {},d2 = {},d3 = {},d4 = {},d5 = {},d6 = {},d7 = {},d8 = {},d9 ={},d10 = {},d11 = {},d12 = {},d13 = {},d14 = {},d15 = {},d16 = {},d17 = {},d18 = {},d19 = {},d20 = {},d21 = {},d22 = {},d23 = {},d24 = {},d25 = {} , d26 = {}, d27 = {}, d28 = {}, d29 = {}, d30 = {}, d31 = {}} 
dw = 0 
dh = 0 
for _,v in pairs(days) do 
    for _,v in pairs(v) do 
     table.insert(v, dw) 
     table.insert(v, dh) 
    end 
end 

for _,v in pairs(days) do 
    for _,v in pairs(v) do 
     print(v) 
    end 
end 

答えて

2

値を追加するためにテーブルを反復処理する必要はありません。実際には、テーブルに値を追加すると、の場合はとなり、新しい値が、つまりの繰り返しになるため、ループは決して終了しません。幸いにも、あなたのテーブルは空ですので、プログラムは決してそのループに入りません。

for _,v in pairs(days) do 
    for _,v in pairs(v) do -- <- unnecessary, potentially dangerous! 
     table.insert(v, dw) 
     table.insert(v, dh) 
    end 
end 

単に内側のループを削除します。

for _,v in pairs(days) do 
    table.insert(v, dw) 
    table.insert(v, dh) 
end 

また、この表のセットを生成する他のオプションも検討してください。

local days = (function (t) 
    for n = 1, 31 do 
     t['d' .. n] = { 0, 0 } 
    end 

    return t 
end) {} 

簡体:

local days = {} 

for n = 1, 31 do 
    days['d' .. n] = { 0, 0 } 
end 
+0

はその岡いただきありがとうございます。それは本当に役立ちます。どのように "関数(t)"が "t [d '..n]"の働きをし、なぜそれらが "t"を返すのかを誰かが説明できますか? – laquishabonquiquithe3rd

+0

@ laquishabonquiquithe3rd 't ['d' .. n]'は 'd 'と' d1'、 'd2'、 'd3''という文字列をループの現在のインデックスと連結したものですテーブル 't'のキーとして使用する。 't'は関数の最初の引数で、関数式(' {} ')の後に新しい空のテーブルとして渡されます。 't'を返して' days'変数に代入します。これは、特にこれらのテーブルの複数を作成しようとしている場合、関数内でこのロジックをラップすることを検討する必要がある、高度なヒントでした。単純にその関数を抽出し、名前を付けて式を置き換えます。 – Oka

関連する問題