Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Manipulate Ruby hash [closed]

Tags:

ruby

key

hash

Using Ruby I need to convert this...

{"30"=>["Morgan", ["lib1", "lib2"]], 
 "31"=>["Morgan", ["lib9", "lib2", "lib3"]], 
 "32"=>["Gary", ["lib1", "lib2"]], 
 "33"=>["Morgan", ["lib1"]], 
 "34"=>["Morgan", []], 
 "35"=>["Morgan", []], 
 "36"=>["Morgan", ["lib3", "lib2"]], 
 "37"=>["jim", ["lib1"]]}

into this...

{"Morgan"=>[30,31,33,34,35,36], 
 "Gary"=>[32], []=>[34,35], 
 "jim"=>[37]}

Any ideas?

like image 270
cymorg Avatar asked Mar 10 '26 05:03

cymorg


1 Answers

input.each_with_object(Hash.new{|h,k|h[k]=[]}) do |(k,v),res|
  (v.last.empty? ? res[[]] : res[v.first]) << k.to_i
end

=> {"Morgan"=>[30, 31, 33, 36], "Gary"=>[32], []=>[34, 35], "jim"=>[37]}
like image 116
megas Avatar answered Mar 12 '26 21:03

megas