jto*_*srl 15 ruby hash ruby-on-rails enumerable
我有一系列哈希,类似于
[ {:type=>"Meat", :name=>"one"},
{:type=>"Meat", :name=>"two"},
{:type=>"Fruit", :name=>"four"} ]
Run Code Online (Sandbox Code Playgroud)
我想把它转换成这个
{ "Meat" => ["one", "two"], "Fruit" => ["Four"]}
Run Code Online (Sandbox Code Playgroud)
我尝试了group_by但是我得到了这个
{ "Meat" => [{:type=>"Meat", :name=>"one"}, {:type=>"Meat", :name=>"two"}],
"Fruit" => [{:type=>"Fruit", :name=>"four"}] }
Run Code Online (Sandbox Code Playgroud)
然后我不能修改它只留下名称而不是完整的哈希.我需要在一行中执行此操作,因为它适用grouped_options_for_select于Rails表单.
saw*_*awa 18
array.group_by{|h| h[:type]}.each{|_, v| v.replace(v.map{|h| h[:name]})}
# => {"Meat"=>["one", "two"], "Fruit"=>["four"]}
Run Code Online (Sandbox Code Playgroud)
遵循steenslag的建议:
array.group_by{|h| h[:type]}.each{|_, v| v.map!{|h| h[:name]}}
# => {"Meat"=>["one", "two"], "Fruit"=>["four"]}
Run Code Online (Sandbox Code Playgroud)
Nik*_*nov 16
在初始数组的单次迭代中:
arry.inject(Hash.new([])) { |h, a| h[a[:type]] += [a[:name]]; h }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12537 次 |
| 最近记录: |