Ruby哈希转置

6
我有以下的 Ruby 哈希表:
 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

这已经非常简洁了。你有一个现实世界的例子,想要像那样转换哈希吗? - Jonas Elfström
我基本上有相同的数据结构(只是更大),其中包含指标(i1,i2,...)以及它们在某些日期(q1,q2,q3,...)的值。我仍然不确定是否应该使用二维数组(实际上我仍在评估两个版本...)。 - Dragan Cvetinovic
如果你经常进行这种操作,你可能会发现使用Sqlite更容易。 - Mladen Jablanović
1个回答

2
如果您更喜欢使用“inject”,您可以这样写:inject
h.inject({}) do |a, (k, v)|
  v.inject(a) do |a1, (k1, v1)|
    a1[k1] ||= {}
    a1[k1][k] = v1
    a1
  end
  a
end

是的,它们做的事情是一样的,只是使用了 inject,虽然我认为第一种方法稍微更易读一些(在真实函数中,我还需要包含几行代码,如异常处理等...) - Dragan Cvetinovic
你在这段代码块上使用了压缩库吗?它看起来很丑 :) - scaryguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接