69

SymbolRuby on Rails 3.2.2を使用していますが、ハッシュキーを「簡単に」/「すばやく」変更したいと思いますString。つまり、{:one => "Value 1", :two => "Value 2", ...}から{"one" => "Value 1", "two" => "Value 2", ...}

できるだけ少ないコードを使用してそれを行うにはどうすればよいですか?

4

9 に答える 9

117

単に呼び出すstringify_keys(またはstringify_keys!

http://apidock.com/rails/Hash/stringify_keys

于 2012-05-11T10:31:48.377 に答える
19

クラスのstringify_keys/stringify_keys!メソッドを使用します。Hash

some_hash.with_indifferent_accessキーを記号または文字列として違いなく指定できるハッシュインスタンスを返すために使用することもできます。

于 2012-05-11T10:30:57.877 に答える
13

stringify_keys素晴らしいですが、Railsでのみ利用可能です。依存関係がゼロの場合、1行でこれを行う方法は次のとおりです。

new_hash = Hash[your_hash.collect{|k,v| [k.to_s, v]}]

これはRuby1.8.7以降で機能します。Ruby 2.1を使用している場合は、次のことができます。

new_hash = a.collect{|k,v| [k.to_s, v]}.to_h

このソリューションは再帰的ではなく、「重複」キーを適切に処理しないことに注意してください。例えば。ハッシュにキーがある場合は:key"key"最後のキーが優先され、最初のキーが上書きされます。

于 2016-04-29T10:47:52.503 に答える
7

hash = hash.transform_keys(&:to_s)記号からすべてのキーを文字列に変換します。

詳細はこちら:https ://ruby-doc.org/core-2.6.3/Hash.html#method-i-transform_keys

これはruby2.5で追加されました:https ://bugs.ruby-lang.org/issues/13583

于 2019-08-13T12:49:37.357 に答える
5

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" }
于 2014-04-23T12:12:20.273 に答える
3

トリックを実行する素晴らしいライブラリがあり、ライブラリは「ファセット/ハッシュ/キーの再生成」であり、メソッドはキーの再生成です!。それを使用する方法の以下の私の例を参照してください。過去のコピーです

> 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"}
于 2012-05-11T10:43:14.453 に答える
2
 new_hash = Hash.new
 your_hash.each{ |k,v| new_hash[k.to_s] = v }

new_hashはyour_hashと同じですが、文字列キーがあります

于 2012-05-11T10:31:04.480 に答える
0

私はここに来て、次よりも良いものがあるかどうかを確認しました。

JSON.parse(hash.to_json)

しかし、私は私が持っているものに固執すると思います。

于 2018-11-16T22:52:21.353 に答える
0

キーを記号から文字列に明示的に転送できます。
hash = hash.map { |k, v| [k.to_s, v] }.to_h

于 2019-06-11T06:25:51.303 に答える