有没有不使用pairs()的循环数组的方法?

我可以使用常规的for循环迭代遍历数组/表格(例如{'a', 'b', 'c'})。然后还有使用pairs的迭代

for _, v in pairs({'a', 'b', 'c'}) do
  io.write(v..'\n')
end

但是当我有一个普通的数组时,我真的不关心键。

有没有一种像

for value in array do end

这样的迭代方法?

我确实看到了这种情况。例如,在我的游戏中使用库创建地图,我看到可以像这样访问地图层中的对象

for object in map.layer["platform"].nameIs("platform") do

有没有像这样迭代的方法?

点赞
用户1009479
用户1009479

对于数组而言,通常使用ipairs而不是pairs。但是仍然需要一个键值:

for _, v in ipairs(arr) do

如果您真的想避免键键值,可以自己编写迭代器。《Lua编程》提供了一个示例:

function values(t)
    local i = 0
    return function() i = i + 1; return t[i] end
end

然后您可以像这样使用它:

local arr = {'a', 'b', 'c', 'd'}
for e in values(arr) do
    print(e)
end
2016-02-03 08:18:36
用户5675002
用户5675002

你所看到的就是使用自定义迭代器的通用 for 循环。

.nameIs("platform") 返回的函数实际上类似 ipairs

例如,这种语法可能像这样实现(尽管不是你的库实际上可能会做的):

local object = {
    platform = {1,2,3,4},
    mob = {4,3,2,1}
}

function object.nameIs(idx)
    local array = object[idx]
    local i = 0
    return function ()
        i = i+1
        return array[i]
    end
end

print "-- Platforms --"
for value in object.nameIs("platform") do
    print(value)
end

print "-- Mobs --"
for value in object.nameIs("mob") do
    print(value)
end

有关更详细的解释,请参见“Lua 编程”在线书籍,你想看到的是“7 - 迭代器和通用 for”部分。

2016-02-03 08:40:33