我有这个哈希:
{["word"]=>1, ["cat"]=>2, ["tree"]=>1, ["dog"]=>1}
但我想要这个哈希:
{"word"=>1, "cat"=>2, "tree"=>1, "dog"=>1}
我已经使用each_key
和join
进行了多次尝试,但似乎没有任何效果。
我该怎么做?
答案 0 :(得分:5)
另一个:
hash = {["word"]=>1, ["cat"]=>2, ["tree"]=>1, ["dog"]=>1}
hash.map { |(k), v| [k, v] }.to_h
#=> {"word"=>1, "cat"=>2, "tree"=>1, "dog"=>1}
答案 1 :(得分:1)
这就是诀窍。
h = {["word"]=>1, ["cat"]=>2, ["tree"]=>1, ["dog"]=>1}
h.keys.each { |k| h[k.first] = h.delete(k) }
h现在是{“word”=> 1,“cat”=> 2,“tree”=> 1,“dog”=> 1}
答案 2 :(得分:0)
这种情况经常出现在Ruby哈希中,我在y_support
gem中编写了解决它们的方法。首先,输入命令行gem install y_support
,然后输入:
require 'y_support/core_ext/hash'
h = { ["word"]=>1, ["cat"]=>2, ["tree"]=>1, ["dog"]=>1 }
h.with_keys &:first
#=> {"word"=>1, "cat"=>2, "tree"=>1, "dog"=>1}
另一种写作方式是
h.with_keys do |key| key[0] end
y_support
gem中定义的其他有用方法包括Hash#with_values
,Hash#with_keys!
,Hash#with_values!
(就地修改版本)和Hash#modify
,其中&#{ 34;将哈希映射到哈希"与Array#map
一样,将数组映射到数组。