原です。

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

これ、私の勘違いです。

  h = Hash[* k.collect_with_index{|x, j| [x, v[j]]}.flatten]

のつもりだったんだけど collect_with_index というメソッドは無いので、
大嘘でした。ごめんなさい。

module Enumerable
  def collect_with_index
    a = []
    each_with_index do |x, i|
      a << yield(x, i)
    end
    a
  end
end

これは最初のわたなべさんの方法とほとんどおなじだ。(^^;

Enumerable のメソッドの多くは「with_index 化」できるなあ、と考えて
いて勘違いしてしまいました。一々メソッドを作らずにする with_index
化するいいやり方って無いかしら。