获取表格内项目的值

local sometable = {a = "ag", b = "fa"}
for k, v in ipairs(sometable) do
    print(k, v)
end

上面的代码是我的尝试,那么如何打印表格中的a,b呢?!

点赞
用户1009479
用户1009479

你使用了错误的迭代器。ipairs 适用于序列。对于哈希表式的表,请使用 pairs

for k, v in pairs(sometable) do 
2016-06-03 13:52:27
用户6245072
用户6245072

ipairs 只会遍历表的 数组 部分。你可以简单地写成:

print(sometable.a, sometable.b)

或者你可以通过使用

for key, value in pairs(sometable)

来循环遍历表的字典和数组部分。你也可以定义自己的迭代器,只循环遍历表的字典部分。在我看来,它应该是这样的:

function cycle(dict)
    local contentarray = {}
    for k, v in pairs(dict) do
        contentarray[#contentarray + 1] = {k, v}
    end
    local n = 0
    return function()
        n = n + 1
        if not contentarray[n] then
            return
        else
            while type(contentarray[n][1]) ~= "string" do
                n = n + 1
            end
            return contentarray[n][1], contentarray[n][2]
         end
    end
end

但是这样会非常低效。

2016-06-03 14:03:31