2d array of hashes

Discussion in 'Ruby' started by Alex Raduca, May 25, 2011.

  1. Alex Raduca

    Alex Raduca Guest

    Hi,

    I am trying to solve the Sudoku Ruby Quiz using a 2d array of hashes
    data model but I probably keep doing something wrong since the hashes
    are referenced at row level(last row of the sudoku matrix is
    referenced).

    Could I get a hint on where I should insert the Hash.new when dealing
    with 2d arrays. I have googled it but I could only find simple array of
    hashes examples.

    Thanks,
    Alex



    # creates sudoku matrix and fills it in with data
    sudoku=Array.new(9,Array.new(9))
    (0..8).each do |x|
    (0..8).each do |y|

    #load cell values into :values
    sudoku[x][y]=Hash.new
    print "load #{temp_ary[x][y]} in sudoku[#{x}][#{y}]\n"
    sudoku[x][y][:value]=temp_ary[x][y]

    #load possible solutions of this cell into :possibilities
    if sudoku[x][y][:value]==0
    sudoku[x][y][:possibilities]=[1,2,3,4,5,6,7,8,9]
    end
    end
    end

    --
    Posted via http://www.ruby-forum.com/.
     
    Alex Raduca, May 25, 2011
    #1
    1. Advertising

  2. On Wed, May 25, 2011 at 12:23 PM, Alex Raduca
    <> wrote:
    > Hi,
    >
    > I am trying to solve the Sudoku Ruby Quiz using a 2d array of hashes
    > data model but I probably keep doing something wrong since the hashes
    > are referenced at row level(last row of the sudoku matrix is
    > referenced).
    >
    > Could I get a hint on where I should insert the Hash.new when dealing
    > with 2d arrays. I have googled it but I could only find simple array of
    > hashes examples.


    So, what is the data model you want? A different hash for each cell?
    Then there is a problem here:

    > # creates sudoku matrix and fills it in with data
    > sudoku=Array.new(9,Array.new(9))


    This creates an array of size 9, pointing 9 times to the same array. Check it:

    ruby-1.8.7-p334 :001 > a = Array.new(9, Array.new(9))
    ruby-1.8.7-p334 :002 > a[0].object_id
    => -611740938
    ruby-1.8.7-p334 :003 > a[1].object_id
    => -611740938

    So, if you add a hash to that inner array, all your rows will have the
    same hash.
    Try this:

    sudoku = Array.new(9) { Array.new(9)}

    or if you want to assign an empty hash right away:

    sudoku = Array.new(9) { Array.new(9) {{}}}

    now, each position in the array of arrays has its own independent hash:

    ruby-1.8.7-p334 :003 > sudoku[0][0][:possibilities] = [1,2,3,4,5,6,7,8,9]
    => [1, 2, 3, 4, 5, 6, 7, 8, 9]
    ruby-1.8.7-p334 :004 > sudoku
    => [[{:possibilities=>[1, 2, 3, 4, 5, 6, 7, 8, 9]}, {}, {}, {}, {},
    {}, {}, {}, {}], [{}, {}, {}, {}, {}, {}, {}, {}, {}], [{}, {}, {},
    {}, {}, {}, {}, {}, {}], [{}, {}, {}, {}, {}, {}, {}, {}, {}], [{},
    {}, {}, {}, {}, {}, {}, {}, {}], [{}, {}, {}, {}, {}, {}, {}, {}, {}],
    [{}, {}, {}, {}, {}, {}, {}, {}, {}], [{}, {}, {}, {}, {}, {}, {}, {},
    {}], [{}, {}, {}, {}, {}, {}, {}, {}, {}]]

    Jesus.
     
    Jesús Gabriel y Galán, May 25, 2011
    #2
    1. Advertising

  3. Alex Raduca

    Alex Raduca Guest

    to be more specific...

    ...I am creating 81 different new Hashes in the nested loops which I
    verified to be true but when checking sudoku[0..8][y] outside the loop
    they all have the same object_id

    --
    Posted via http://www.ruby-forum.com/.
     
    Alex Raduca, May 25, 2011
    #3
  4. Alex Raduca

    Alex Raduca Guest

    Hi Jesus,

    Thanks for the help. Indeed, I didn't realize I was instantiating the 2d
    array the wrong way.

    Cheers,
    Alex

    --
    Posted via http://www.ruby-forum.com/.
     
    Alex Raduca, May 25, 2011
    #4
    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:
    578
    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:
    175
    Mauricio Fernández
    Nov 23, 2005
  3. kazaam
    Replies:
    12
    Views:
    281
    Matthias Wächter
    Sep 13, 2007
  4. Matt Brooks
    Replies:
    16
    Views:
    236
    Matt Brooks
    Sep 16, 2009
  5. 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:
    221
Loading...

Share This Page