【发布时间】:2015-09-07 14:57:51
【问题描述】:
我需要按照创建的顺序遍历 Lua 表。我找到了这篇文章 - http://lua-users.org/wiki/SortedIteration 但它似乎不起作用:
function __genOrderedIndex( t )
local orderedIndex = {}
for key in pairs(t) do
table.insert( orderedIndex, key )
end
table.sort( orderedIndex )
return orderedIndex
end
function orderedNext(t, state)
-- Equivalent of the next function, but returns the keys in the alphabetic
-- order. We use a temporary ordered key table that is stored in the
-- table being iterated.
key = nil
--print("orderedNext: state = "..tostring(state) )
if state == nil then
-- the first time, generate the index
t.__orderedIndex = __genOrderedIndex( t )
key = t.__orderedIndex[1]
else
-- fetch the next value
for i = 1,table.getn(t.__orderedIndex) do
if t.__orderedIndex[i] == state then
key = t.__orderedIndex[i+1]
end
end
end
if key then
return key, t[key]
end
-- no more value to return, cleanup
t.__orderedIndex = nil
return
end
function orderedPairs(t)
return orderedNext, t, nil
end
以下是使用示例:
t = {
['a'] = 'xxx',
['b'] = 'xxx',
['c'] = 'xxx',
['d'] = 'xxx',
['e'] = 'xxx',
}
for key, val in orderedPairs(t) do
print(key.." : "..val)
end
我收到一个错误:
尝试调用字段“getn”(零值)
有什么问题?
【问题讨论】:
-
不是答案,而是极好的资源:(devdocs.io/lua)