如何在lua中在同一个“for”中添加多个数组

我如何在lua中使用“for k, j in pairs() do”为2个数组?

 local blipmarker1 = {
      { x = 10 , y = 5, z = 3 },
      { x = 5, y = 5, z= 3}
}
local blipmarker2 = {
      { x = 100, y= 150, z=30 }
}
function createtext(){
    local pos = GetEntityCoords(PlayerPedId(), true)
    for k, j in pairs(blipmarker1,blimarker2) do
        draw3DText(pos.x, pos.y, pos.z, j.x, j.y, j.z)
    end
 }
点赞
用户12918181
用户12918181

函数pairs()仅接受一个类型为table的参数。你需要为每个table都写一个循环:

for k,j in pairs(blipmarker1) do
  ...
end
for k,j in pairs(blipmarker2) do
  ...
end
2020-02-18 19:49:06
用户1944004
用户1944004

你可以编写自己的有状态的multipairs迭代器。有关详细信息,请参阅《Lua编程》第9.3章“协同程序作为迭代器”:https://www.lua.org/pil/9.3.html

local function multipairs(tables)
    return coroutine.wrap(function()
        for _, t in pairs(tables) do -- 这里可能需要用 ipairs
            for k, v in pairs(t) do
                coroutine.yield(k, v)
            end
        end
    end)
end

local blipmarker1 = {
    { x = 10 , y = 5, z = 3 },
    { x = 5, y = 5, z= 3}
}
local blipmarker2 = {
    { x = 100, y= 150, z=30 }
}

for _, j in multipairs{blipmarker1, blipmarker2} do
    print(j.x, j.y, j.z)
end
2020-02-20 01:40:15