返回哈希與修改後的值,我想這樣的:在Ruby中
{:id => 5, :foos => [1,2,3]}.each {|k,v| v.to_s}
但是,這回這樣的:
{:id=>5, :foos=>[1, 2, 3]}
我想看到這一點:
{:id=>"5", :foos=>"[1, 2, 3]"}
我已經也嘗試了Hash#collect
和Hash#map
的變體。有任何想法嗎?
返回哈希與修改後的值,我想這樣的:在Ruby中
{:id => 5, :foos => [1,2,3]}.each {|k,v| v.to_s}
但是,這回這樣的:
{:id=>5, :foos=>[1, 2, 3]}
我想看到這一點:
{:id=>"5", :foos=>"[1, 2, 3]"}
我已經也嘗試了Hash#collect
和Hash#map
的變體。有任何想法嗎?
你可以使用Object#inspect
:
{ :id => 5, :foos => [1, 2, 3] }.inject({}) do |hash, (key, value)|
hash.merge key => value.inspect
end
返回:
{ :foos => "[1, 2, 3]", :id => "5" }
,或者如果你希望它是破壞性的:
hash = { :id => 5, :foos => [1, 2, 3] }
hash.each_key { |key| hash[key] = hash[key].inspect }
你的東西不起作用,因爲v.to_s不會修改v,所以本質上塊不會做任何事情。
你可以做這樣的:
hash = {:id => 5, :foos => [1,2,3]}
hash.each_key { |k| hash[k] = hash[k].to_s }
如果你不想改變哈希:
hash = {:id => 5, :foos => [1,2,3]}
new_hash = {}
hash.each_key { |k| new_hash[k] = hash[k].to_s }
@glebm,有沒有做修改散列的任何方法? – 2010-04-03 18:51:05
我編輯了答案,向您展示瞭如何在不修改散列號的情況下執行此操作 – glebm 2010-04-03 18:53:58
@glebm,我希望**修改原始散列。我不需要修改它:) – 2010-04-03 18:57:19
@rubiii,** Ruby **在Ruby 1.9中,'Array#to_s'產生與'Array#inspect'相同的結果。我不知道這是否適用於以前的版本。 – 2010-04-04 18:34:32
@smotchkiss我剛剛嘗試過在1.9.1-p378上使用irb,並且..你是對的:)不知道。對於紅寶石1.8.7雖然[1,2,3] .to_s只是返回「123」。 – rubiii 2010-04-04 19:36:43