2014-01-08 51 views
1

反转我的散列(开关机键/值),I组在轨的哈希像这样:我怎么通过价值

{"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"]} 

我将如何去做这个与散列?

+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

装置推压键放到阵列上

0

试试这个:

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

group_by把你的哈希和团体也通过价值

each迭代结果哈希

map!映射的结果值阵列的第一要素,因为group_byHash返回二维结构Array s结构[key, value]