From: Matt Williams Date: 2009-02-13T02:22:22+09:00 Subject: Re: Arrays and Hashes processing :pls help On Fri, 2009-02-13 at 01:58 +0900, Jags Rao wrote: > > hi friends > > i have a long array with structure like this > > [["377", "838"], > ["377", "990"], > ["377", "991"], > ["377", "992"], > ["378", "840"], > ["378", "841"], > ["378", "842"], > ["378", "843"], > ["378", "844"]] > > how can i convert it in one line to > > [["377", "838 990 991 992"], > ["378", "840 841 842 843 844"]] > if thats diificult is the below array processable in one line > > [{"prefix"=>"838", "scf_id"=>"377"}, > {"prefix"=>"990", "scf_id"=>"377"}, > {"prefix"=>"991", "scf_id"=>"377"}, > {"prefix"=>"992", "scf_id"=>"377"}, > {"prefix"=>"840", "scf_id"=>"378"}, > {"prefix"=>"841", "scf_id"=>"378"}, > {"prefix"=>"842", "scf_id"=>"378"}, > {"prefix"=>"843", "scf_id"=>"378"}, > {"prefix"=>"844", "scf_id"=>"378"}] > > in this form > > [{"prefix"=>"838 990 991 992", "scf_id"=>"377"}, > {"prefix"=>"840 841 842 843 844", "scf_id"=>"378"}] > I don't understand the need for one line, but.... Also, why an array of hashes? why not a hash? if your array of hashes is referenced by h, then: out = h.inject({}) {|s,v| x=s[v["scf_id"]] || ""; s[v["scf_id"]]="#{x} #{v["prefix"]}".trim;s} that (above) gives you a hash with distinct values of scf_id referencing prefixes. That said, you can do the following if you *must* have an array: out = (h.inject({}) {|s,v| x=s[v["scf_id"]] || ""; s[v["scf_id"]]="#{x} #{v["prefix"]}".trim;s}).inject([]){|s,v| s<<{"scf_id"=>v[0],"prefix"=>v[1]};s} It's ugly. Not maintainable. Why the need for one line? > pls help > Jags