fork(2) download
  1. initial_hash = [
  2. {"name" => "name1", "folder" => "folder1", :id => 1 },
  3. {"name" => "name1", "folder" => "folder1", :id => 2 },
  4. {"name" => "name1", "folder" => "folder2", :id => 3 },
  5. {"name" => "name2", "folder" => "folder1", :id => 4 }]
  6.  
  7. transformed_hash = initial_hash
  8. .group_by { |x| x['name'] }
  9. .map { |k, v| [k, v.group_by{ |x| x['folder'] }] }
  10. .to_h
  11.  
  12. require 'pp'
  13.  
  14. pp transformed_hash
  15.  
Success #stdin #stdout 0.02s 10088KB
stdin
Standard input is empty
stdout
{"name1"=>
  {"folder1"=>
    [{"name"=>"name1", "folder"=>"folder1", :id=>1},
     {"name"=>"name1", "folder"=>"folder1", :id=>2}],
   "folder2"=>[{"name"=>"name1", "folder"=>"folder2", :id=>3}]},
 "name2"=>{"folder1"=>[{"name"=>"name2", "folder"=>"folder1", :id=>4}]}}