将哈希数组键更改为字符串

时间:2014-09-04 14:12:17

标签: ruby arrays algorithm hash

我有这个哈希:

{["word"]=>1, ["cat"]=>2, ["tree"]=>1, ["dog"]=>1}

但我想要这个哈希:

{"word"=>1, "cat"=>2, "tree"=>1, "dog"=>1}

我已经使用each_keyjoin进行了多次尝试,但似乎没有任何效果。

我该怎么做?

3 个答案:

答案 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_valuesHash#with_keys!Hash#with_values!(就地修改版本)和Hash#modify,其中&#{ 34;将哈希映射到哈希"与Array#map一样,将数组映射到数组。