原です。

> p k.collect{|x, j| [x, v[j]]} #=> {2=>20, 3=>30}

間違えました。 #=>  [[2, 20], [3, 30]]

でした。

こういう手も考えました。

module Enumerable
  class With_index
    include Enumerable
    def initialize(x)
      @obj = x
      @i = 0
    end
    def each
      @obj.each do |x|
	yield(x, @i)
	@i += 1
      end
    end
  end
  
  def with_index
    With_index.new(self)
  end
end

k = [2, 3]
v = [20, 30]
p k.with_index.collect{|x, j| [x, v[j]]} #=> [[2, 20], [3, 30]]

p k.with_index とすると内部クラスが見えてしまうのが難か。

しらないうちに Array, Hash の話でなくなって、例の i++ 問
題になりかかっている。(^^;