如何反转我的哈希值(切换键/值)和按值分组

时间:2014-01-08 17:24:18

标签: ruby-on-rails hash

我在rails中有一个哈希:

{"unique_id" => "1",
 "unique_id2" => "2",
 "unique_id3" => "n"}

每个唯一键的计数可以是1-20。我想做的是有一个看起来像这样的哈希:

{"1" => ["unique_id", "unique_id2"],
 "2" => ["unique_id3"],
 "3" => ["unique_id4", "unique_id5", "uniqueid6"]}

我如何用哈希来做这件事?

2 个答案:

答案 0 :(得分:2)

不太难!

hash = { "unique_id" => "1",
  "unique_id2" => "2",
  "unique_id3" => "n"
}
new_hash = hash.each_with_object({}) { |(k,v), h| (h[v] ||= []) << k }

each_with_object({})只是一个带有空白哈希的每个循环

||= []表示如果散列没有v的值,则将其设置为空数组

<< k将密钥推送到数组

答案 1 :(得分:0)

试试这个:

  h.group_by{|k,v| v }.each{|k,v| v.map!(&:first) }

group_by获取您的哈希并按值

对其进行分组

each遍历结果哈希

map!映射结果值数组的第一个元素,因为group_by上的Hash会返回结构为Array <的二维[key, value] / p>