*Luaリファレンス 要注意点 ~配列~ [#a5bdcc78] **index番号は"1"から [#w28c539c] -配列はLUAではINDEX==1 から始めます。~ 様々な関数が、それを前提とした作りになっていますので、~ 強引に「0」から開始したりはせず、素直に「1」からにしましょう。~ ~ また、#が配列の長さになりますので、~ #sh(lua){{ a[#a+1] = v }} などで、リストの最後に追加というイディオムとなります。~ **配列の0からのインデックス [#x9e81052] -配列のインデックスを強引に0からにした例 #sh(lua){{ days = { [0] = "Sunday", "Monday", "Tuesday", ..... } }} というようにインデックス[0]を書いておけば良い。~ #sh(lua){{ arr = { 1,2,3,[0]=0 } }} というように、位置はどこでも良い。~ ~ ただし、Luaでは多くの関数が、配列1からのスタートを前提とした設計になっているので、 このようなことは避けたほうが賢明 **配列の間に"nil"がある場合、#による長はあてにならない [#tcf9f4d0] -配列の要素にnilがあると、#は非常にわかりにくいアルゴリズムとなってしまうため~ まともに使えません。~ 配列の要素にnilがある場合は、#やipairsを使わないようにしましょう。 #sh(lua){{ local a = {1,2,3,nil,5,nil} print(#a) --> 3 local a = {1,2,3,nil,5} a[4] = nil print(#a) --> 5 a[6] = nil print(#a) --> 3 a[6] = 6 print(#a) --> 3 local a = {1,2,3,nil,5,nil} print(#a) --> 3 a[6] = 6 print(#a) --> 6 a[6] = nil print(#a) --> 3 a[7] = 7 print(#a) --> 3 }} というように、理解しがたい値が返ってきます。 **配列の間に"nil"がある場合、ipairsはそこで終了 [#de510679] -ipairsがnilで終了してしまうことも、引っかかりやすい挙動です。 #sh(lua){{ local a = {1,2,3,nil,5} for k, v in ipairs(a) do print(k, v) end -- 1 1 -- 2 2 -- 3 3 }} **配列が空は、「not next (対象テーブル)」と判定[#w59cbd3a] > #sh(lua){{ mytable = {}; if not next mytable then print "It's empty" end }} 関連項目 => [[table.empty>Lua implements_func_table#table_empty]] ~