在Ruby中反转哈希

sly*_*lyv 30 ruby hashmap

我如何反转哈希中的元素,保持相同的值和键,但在哈希中反转它们的顺序.

像这样:

{ "4" => "happiness", "10" => "cool", "lala" => "54", "1" => "spider" }
Run Code Online (Sandbox Code Playgroud)

并将其转换为:

{ "1" => "spider", "lala" => "54", "10" => "cool", "4" => "happiness" }
Run Code Online (Sandbox Code Playgroud)

或者,也许我可以each向后运行一个循环,从哈希中的最后一个元素开始,而不是第一个?

mu *_*ort 63

您可以将哈希转换为数组,反过来,然后将其转换回哈希:

reversed_h = Hash[h.to_a.reverse]
Run Code Online (Sandbox Code Playgroud)

Hash#to_a给你一个数组数组,内部数组是简单的[key,value]对,然后你使用反转该数组Array#reverse,Hash[]并将[key,value]对转换回哈希.

Ruby 2.1添加了一个Array#to_h方法,现在你可以说:

reversed_h = h.to_a.reverse.to_h
Run Code Online (Sandbox Code Playgroud)

  • reversed_h =哈希[h.to_a.collect(&:reverse)] (7认同)

Ste*_*fan 6

在Ruby 2.1+你可以结合reverse_eachto_h:

{foo: 1, bar: 2}.reverse_each.to_h
#=> {:bar=>2, :foo=>1}
Run Code Online (Sandbox Code Playgroud)


kha*_*maa 5

在纯红宝石中,您可以通过hash.map(&:reverse).to_hhash.reverse_each.to_h

在 Rails 中,你可以这样做hash.invert