Matthew Williams
2/12/2009 5:22:00 PM
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