将哈希分割成哈希值

时间:2016-10-13 09:22:08

标签: ruby hash key

我是Ruby的新手

我有一个带有大量key =>的哈希价值对。我想根据密钥将这个哈希分成哈希值。

{..."LoopLabs "=>1, "Influanza "=>1, "Cleo Media "=>1, "Adento "=>1, "HireRadar "=>1, "FidorFactory "=>1, "Four Energy "=>1, "Liefery "=>5, "Weaveworks "=>1, "Gastrofix "=>1 }

我希望得到以下结果:

{ label: "LoopLabs", values: [[1]] }
{ label: "Influanza", values: [[1]] }
{ label: "Liefery", values: [[5]] }
...

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您可以这样做:

hash = {"LoopLabs "=>1, "Influanza "=>1, "Cleo Media "=>1, "Adento "=>1, "HireRadar "=>1, "FidorFactory "=>1, "Four Energy "=>1, "Liefery "=>5, "Weaveworks "=>1, "Gastrofix "=>1 }
hash.map {|k,v| {label: k, values: [[v]]}}
# => [{:label=>"LoopLabs ", :values=>[[1]]},
# {:label=>"Influanza ", :values=>[[1]]},
# {:label=>"Cleo Media ", :values=>[[1]]},
# {:label=>"Adento ", :values=>[[1]]},
# {:label=>"HireRadar ", :values=>[[1]]},
# {:label=>"FidorFactory ", :values=>[[1]]},
# {:label=>"Four Energy ", :values=>[[1]]},
# {:label=>"Liefery ", :values=>[[5]]},
# {:label=>"Weaveworks ", :values=>[[1]]},
# {:label=>"Gastrofix ", :values=>[[1]]}]

答案 1 :(得分:0)

实现这一目标的一般方法是:

hash.dup
    .group_by(&:shift)
    .map(&%i|label values|.method(:zip))
    .map(&:to_h)