以下はProgramming in Luaからの引用です: 19.3 .
よくある間違いは、テーブルのインデックスを並べ替えようとすることです。テーブルでは、インデックスはセットを形成し、順序はありません。それらを並べ替えたい場合は、それらを配列にコピーしてから、配列を並べ替える必要があります。
でテーブルをトラバースするとpairs()
、名前は任意の順序で表示されます。ただし、これらの名前はテーブルのキーであるため、直接ソートすることはできません。
回避策も同じページに記載されています。
local tableVarName = {
STANDBY = {
timeout = "10",
mode = "0"
},
RTP = {
minport = "10000",
maxport = "10010"
}
}
function pairsByKeys (t, f)
local a = {}
for n in pairs(t) do table.insert(a, n) end
table.sort(a, f)
local i = 0 -- iterator variable
local iter = function () -- iterator function
i = i + 1
if a[i] == nil then return nil
else return a[i], t[a[i]]
end
end
return iter
end
for name, line in pairsByKeys(tableVarName) do
print(name, line)
end