Lua有序表迭代

我需要按照创建的顺序遍历 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)
key = nil
if state == nil then
    t.__orderedIndex = __genOrderedIndex( t )
    key = t.__orderedIndex[1]
else
    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

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

我收到一个错误:

attempt to call field 'getn' (a nil value)

问题是什么?

点赞
用户1009479
用户1009479

table.getn自Lua 5.1版本开始已被移除,它被#运算符所代替。

table.getn(t.__orderedIndex)改为#t.__orderedIndex

2015-09-07 15:05:34