Arrays and Hashes processing :pls help

Discussion in 'Ruby' started by Jags Rao, Feb 12, 2009.

  1. Jags Rao

    Jags Rao Guest

    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"}]

    pls help
    Jags
    --
    Posted via http://www.ruby-forum.com/.
     
    Jags Rao, Feb 12, 2009
    #1
    1. Advertising

  2. 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
     
    Matt Williams, Feb 12, 2009
    #2
    1. Advertising

  3. On 12.02.2009 17:58, Jags Rao wrote:

    > 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


    Why in a single line?

    Cheers

    robert
     
    Robert Klemme, Feb 12, 2009
    #3
  4. Jags Rao

    Guest

    On Feb 12, 10:58 am, 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"}]
    >
    > pls help
    > Jags
    > --
    > Posted viahttp://www.ruby-forum.com/.


    a = [["377", "838"],
    ["377", "990"],
    ["377", "991"],
    ["377", "992"],
    ["378", "840"],
    ["378", "841"],
    ["378", "842"],
    ["378", "843"],
    ["378", "844"]]
    h=Hash.new{[]};a.each{|x,y|h[x]+=[y]};h.map{|x,y|[x,y.join(" ")]}
    ==>[["377", "838 990 991 992"], ["378", "840 841 842 843 844"]]
     
    , Feb 12, 2009
    #4
  5. Jags Rao

    Jags Rao Guest

    hi guys
    thank u so much for the help.
    no issues with a multi line solution also

    -Jags
    --
    Posted via http://www.ruby-forum.com/.
     
    Jags Rao, Feb 13, 2009
    #5
  6. On 2/12/09, 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"]]


    original_array = [["377", "838"],
    ["377", "990"],
    ["377", "991"],
    ["377", "992"],
    ["378", "840"],
    ["378", "841"],
    ["378", "842"],
    ["378", "843"],
    ["378", "844"]]

    new_array = original_array.group_by {|x| x[0]}.map {|k,v| [k, v.join(" ")]}
     
    Christopher Dicely, Feb 13, 2009
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Ben Holness

    Hashes of Hashes via subs

    Ben Holness, Oct 5, 2003, in forum: Perl
    Replies:
    8
    Views:
    591
    Ben Holness
    Oct 8, 2003
  2. Steven Arnold

    using hashes as keys in hashes

    Steven Arnold, Nov 23, 2005, in forum: Ruby
    Replies:
    3
    Views:
    184
    Mauricio Fernández
    Nov 23, 2005
  3. kazaam
    Replies:
    12
    Views:
    295
    Matthias Wächter
    Sep 13, 2007
  4. Tim O'Donovan

    Hash of hashes, of hashes, of arrays of hashes

    Tim O'Donovan, Oct 27, 2005, in forum: Perl Misc
    Replies:
    5
    Views:
    237
  5. Replies:
    3
    Views:
    233
Loading...

Share This Page