zip関数(2)
複数のテーブル対応版。テーブルのリスト部分のみに対応。
function zip(...) local args = {...} return coroutine.wrap(function () local t = {} for i, arg in ipairs(args) do local ff,tt,nn = ipairs(arg) t[arg] = {ff,tt,nn} end local is_end = false while true do local vars = {} for k, v in pairs(t) do local ff,tt,nn = unpack(v) local ii, vv = ff(tt,nn) if not vv then is_end = true end t[k] = {ff,tt,nn+1} table.insert(vars, vv) end if is_end then break end coroutine.yield(unpack(vars)) end end) end for a,b,c in zip({1,2,3}, {'a','b','c'}, {'d','e','f'}) do print(a,b,c) end --実行結果 a 1 d b 2 e c 3 f