I have a hash that has multiple value separated by comma but I need to separate it into single hash for each value.
Currently I have this hash:
{"key"=>"value,value1,value2", "key1"=>"value,value1,value2", "key2"=>"value,value1,value2"}
Is there a way to separate it to single hash for each value like this:
[{"key"=>"value", "key1"=>"value", "key2"=>"value"}
{"key"=>"value1", "key1"=>"value1", "key2"=>"value1"}
{"key"=>"value2", "key1"=>"value2", "key2"=>"value2"}]
Any idea is welcome, Thanks!
CodePudding user response:
h = { "key" =>"value,value1,value2",
"key1"=>"value,value1,value2",
"key2"=>"value,value1,value2" }
g = h.transform_values { |v| v.split(',') }
#=> {"key"=> ["value", "value1", "value2"],
# "key1"=>["value", "value1", "value2"],
# "key2"=>["value", "value1", "value2"]}
g["key"].size.times.map { g.transform_values(&:shift) }
#=> [{"key"=>"value", "key1"=>"value", "key2"=>"value"},
# {"key"=>"value1", "key1"=>"value1", "key2"=>"value1"},
# {"key"=>"value2", "key1"=>"value2", "key2"=>"value2"}]
CodePudding user response:
I feel like this might be overly complicated and might need some tweaks, but here's another option that seems to get the job done and works for more than 3 values so long as the length of values is always the same:
h = {"key"=>"value,value1,value2,value3", "key1"=>"value,value1,value2, value3", "key2"=>"value,value1,value2,value3"}
h.values.each_with_index.map {|v, i| v.split(",").map {|e| {h.keys[i] => e}}}.transpose.map{|x| x.inject(&:merge)}.join("\n")
#=>
{"key"=>"value", "key1"=>"value", "key2"=>"value"}
{"key"=>"value1", "key1"=>"value1", "key2"=>"value1"}
{"key"=>"value2", "key1"=>"value2", "key2"=>"value2"}
{"key"=>"value3", "key1"=>" value3", "key2"=>"value3"}
