我有一个哈希数组:
[{'object' => 'ob1', 'quantity' => '2'}, {'object' => 'ob2', 'quantity' => '3'}, .....]
我想将其转换为符号形式:
[{:object => 'ob1', :quantity => '2'}, {:object => 'ob2', :quantity => '3'}, .....]
尝试:
symbolized_array = array.each => { |c| c.to_options }
但是我没有获得任何转换,symbolized_array
与数组相同
为什么?
答案 0 :(得分:4)
从ruby 2.5开始,就有Hash#transform_keys
:
array.map{|hash| hash.transform_keys(&:to_sym) }
在此之前,它与快捷方式symbolize_keys
一起在activesupport(导轨的一部分)中可用
答案 1 :(得分:3)
您标记了rails
,因此您可以使用symbolize_keys
array.map(&:symbolize_keys)
答案 2 :(得分:3)
我没有获得任何转换[...]为什么?
to_options
确实返回带有符号键的新哈希,但您没有使用该新哈希– each
仅遍历数组,最后返回数组。
如果要将块结果用作新的数组元素,则必须使用map
:
array.map { |c| c.to_options } # or array.map(&:to_options)
或者有to_options!
(带有!
)可以与each
一起使用:
array.each { |c| c.to_options! } # or array.each(&:to_options!)
这是因为to_options!
修改了哈希值。
请注意,to_options
是symbolize_keys
的别名,可能更清楚了。
答案 3 :(得分:2)
使用以下代码。然后您将获得预期的输出
array.map! {|my_hash| my_hash.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}}
或,您只需使用array.map(&:symbolize_keys)
。该代码将在Rails环境下工作