如何将哈希键从“符号”更改为“string”?
我正在使用Ruby on Rails 3.2.2,并且我想“很容易”/“快速”地将哈希键从Symbol
s更改为String
s。 也就是说,从{:one => "Value 1", :two => "Value 2", ...}
to {"one" => "Value 1", "two" => "Value 2", ...}
。
我怎样才能通过使用更less的代码尽可能?
只需调用stringify_keys(或stringify_keys!)
使用stringify_keys
/ stringify_keys!
Hash
类的方法。
您也可以使用some_hash.with_indifferent_access
返回一个Hash实例,其中您的密钥可以被指定为符号或string,没有区别。
stringify_keys
很好,但只能在Rails中使用。 以下是我将如何在一行中完成的,具有零依赖关系:
new_hash = Hash[your_hash.collect{|k,v| [k.to_s, v]}]
这适用于Ruby 1.8.7及更高版本。 如果你正在使用Ruby 2.1,你可以这样做:
new_hash = a.collect{|k,v| [k.to_s, v]}.to_h
请注意,此解决scheme不是recursion的,也不会正确处理“重复”键。 例如。 如果你有:key
和"key"
作为你的哈希键,最后一个将优先和覆盖第一个。
来自rails的stringify_keys
http://api.rubyonrails.org/classes/Hash.html#method-i-stringify_keys
hash = { name: 'Rob', age: '28' } hash.stringify_keys # => { "name" => "Rob", "age" => "28" }
new_hash = Hash.new your_hash.each{|k,v| new_hash[k.to_S] = v}
new_hash将与your_hash相同,但使用string键
有一个很好的库,这个技巧,库是“facets / hash / rekey”,方法是rekey !. 在我的例子下面如何使用它。 这只是过去的一个副本
> require 'facets/hash/rekey' => true > a = {:one => "Value 1", :two => "Value 2"} => {:one=>"Value 1", :two=>"Value 2"} > a.rekey!(&:to_s) => {"one"=>"Value 1", "two"=>"Value 2"} > a => {"one"=>"Value 1", "two"=>"Value 2"}