zip関数
Luaでzip関数を作成してみました。
function zip(xs, ys) local i = 1 return function() x = xs[i] y = ys[i] if x and y then i = i + 1 return x, y else return nil end end end function main() for a, b in zip({1,2}, {3,4,5}) do print(a, b) end end main()
実行結果です。
1 3 2 4
要素の長い方に揃えるziplong関数も作ってみました。
function ziplong(xs, ys) local i = 1 return function() x = xs[i] y = ys[i] if x or y then i = i + 1 return x, y else return nil end end end function main() for a, b in ziplong({3,4,5,6}, {1,2}) do print(a, b) end print("---") for a, b in ziplong({1,2}, {3,4,5,6}) do print(a, b) end end main()
実行結果です。
3 1 4 2 5 nil 6 nil --- 1 3 2 4
nilを返すとまずいのか。