わたなべです.

Inaba Hiroto <inaba / st.rim.or.jp> writes:

:>   h = Hash[* k.each_with_index.collect{|x, j| [x, v[j]]}.flatten]
:
:こんな書き方もできるんだ、と思って試してみたんですが、
:少なくとも、ruby 1.1b9_11にわたなべさんの[ruby-dev:2387]のpatchを当て
:たものでは動かないようなんですが、何が悪いのでしょうか。

たしかに collect_with_index がないと無理ですね.
module Enumerable
  def collect_with_index
    ary = []
    each_with_index do |x, i|
      ary.push yield(x, i)
    end
    ary
  end
end
h = Hash[*k.collect_with_index{|x, j| [x, v[j]]}.flatten]

結局
h = Hash[*(0..k.size-1).collect{|i| [k[i], v[i]]}.flatten]
でもいいんだけど.

module Enumerable
  def collects
    ary = []
    (0..self[0].size-1).each do |i|
      ary.push yield(*collect{|x| x[i]})
    end
    ary
  end
end
こんなのを作って
h = Hash[*[k, v].collects{|x, y| [x, y]}.flatten]
ってのはどうかな?

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
w = [x, y, z].collects{|i, j, k| i + j + k}
p w
[12, 15, 18]
なんてのもできるし. 表計算にはよくでてきそうなパターン.

-- 
わたなべひろふみ