From: Yukihiro Matsumoto Date: 2010-03-13T22:44:26+09:00 Subject: [ruby-dev:40623] Enumerable#interleave まつもと ゆきひろです Enumerable#interleave というメソッドを追加してはどうかと思い ます。Clojureなどで見られるメソッドです。仕様は /* * call-seq: * enum.interleave(arg, ...) => enumerator * enum.interleave(arg, ...) {|x| block } => nil * * Takes one element from enum and following arguments then * merges corresponding elements from each args into a flat * sequence. If a block is given, it is invoked for each element, * otherwise an array of elements is returned. * * a = [ 4, 5, 6 ] * b = [ 7, 8, 9 ] * * [1,2,3].interleave(a, b) #=> [1, 4, 7, 2, 5, 8, 3, 6, 9] * [1,2].interleave(a,b) #=> [1, 4, 7, 2, 5, 8, 6, 9] * a.interleave([1,2],[8]) #=> [4, 1, 8, 5, 2, 6] * */ という感じで。これを実装してたら Enumerable#zip は生成する長 さをレシーバーじゃなくて、最短の Enumerable に合わせるべきで はないかと感じるようになったけど、それはまた別の話。 まつもと ゆきひろ /:|)