6

私は次のルビーハッシュを持っています:

 h = { i1: { q1: 1, q2:2 }, i2: { q1: 3, q2: 4} }

そして私はそれを次のように転置したいと思います:

{ q1: { i1: 1, i2: 3 }, q2: { i1: 2, i2: 4 } }

さて、自分のやりたいことをやってくれる関数を思いついたのですが、同じことをもっと簡潔でエレガントな方法があるのではないかと思います。

私の解決策:

 ht = Hash.new{ |h,k| h[k] = {} }

 h.each_pair do |k,ih| 
   ih.each_pair{ |ik, iv| ht[ik][k] = iv }
 end
4

1 に答える 1

2

必要に応じinjectて、次のように書くことができます

h.inject({}){|a,(k,v)|
  v.inject(a){|a1,(k1,v1)|
    a1[k1] ||= {}
    a1[k1][k] = v1
    a1
  }
  a
}
于 2010-11-12T14:56:37.190 に答える