将哈希值更改为ruby中的数组数组

Bij*_*dra 10 ruby hash ruby-on-rails

假设我有一个哈希值

 {:facebook=>0.0, :twitter=>10.0, :linkedin=>6.0, :youtube=>8.0}
Run Code Online (Sandbox Code Playgroud)

现在我希望它改成像这样的数组

[[Facebook,0.0],[Twitter,10.0],[Linkedin,6.0],[Youtube,8.0]]
Run Code Online (Sandbox Code Playgroud)

我可以使用逻辑来提取并将其更改为数组,但我只是想知道在ruby中是否可以使用任何已定义的方法来实现上述方法.

Gaz*_*ler 28

你可以使用to_a.

{:facebook=>0.0, :twitter=>10.0, :linkedin=>6.0, :youtube=>8.0}.to_a
Run Code Online (Sandbox Code Playgroud)

回报

[[:facebook, 0.0], [:twitter, 10.0], [:linkedin, 6.0], [:youtube, 8.0]] 
Run Code Online (Sandbox Code Playgroud)

这不会自动将符号转换为常量,但您必须使用map(和const_get).

{:facebook=>0.0, :twitter=>10.0, :linkedin=>6.0, :youtube=>8.0}.map{|k,v| [Kernel.const_get(k.to_s.capitalize), v]}
Run Code Online (Sandbox Code Playgroud)

输出

[[Facebook,0.0],[Twitter,10.0],[Linkedin,6.0],[Youtube,8.0]]
Run Code Online (Sandbox Code Playgroud)


Igo*_*kov 6

只需将您的哈希包装在[]中,然后在哈希之前添加星号.

[*{:facebook=>0.0, :twitter=>10.0, :linkedin=>6.0, :youtube=>8.0}]
Run Code Online (Sandbox Code Playgroud)


tok*_*and 5

sites = {:facebook => 0.0, :twitter => 10.0, :linkedin => 6.0, :youtube => 8.0}
sites.map { |key, value| [Object.const_get(key.to_s.capitalize), value] }
Run Code Online (Sandbox Code Playgroud)