Ruby -- convert a nested hash to a multidimensional array -
i have hash named h. want store contents in multidimensional array named ar. getting error no implicit conversion nil integer.
here code:
h = {"bob" => {email: "abc" , tel: "123"} , "daisy" => {email: "cab" , tel: "123456"}} keys = h.keys l = h.length ar = array.new(l) { array.new(3) } in 0..l-1 ar[[2][i]] = keys[i] ar[[1][i]] = h[keys[i]][:email] ar[[0][i]] = h[keys[i]][:tel] end puts ar.to_s the desired output is:
[[email_1, email_2, ..][tel_1, tel_2, ..][name_1, name_2, ..]] for example:
[["abc", "cab"] , ["123", "123456"] , ["bob", "daisy"]]
this way handle this:
h.values.each_with_object({}) |h,obj| obj.merge!(h) { |_k,v1,v2| ([v1] << v2).flatten } end.values << h.keys #=> [["abc", "cab"], ["123", "123456"], ["bob", "daisy"]] - first grab
values(as hashes) - loop through them accumulator (
{}) merge!values accumulator , on conflict append themarray- return
valuesaccumulator - then append original
keys
this less explicit @mudasobwa's answer , relies on order of first value determine output. e.g. if :tel came before :email first 2 elements have reversed order
wiki
Comments
Post a Comment