How to map over a nested array

10,203

Solution 1

You don't need indexing at all.

my_array.map{|row| row.map{random_letter}}

If you want to retain the object id of each array and change the content, then you can use replace.

my_array.each{|row| row.replace(row.map{random_letter})}

Solution 2

I think the below will work:

my_array.map{|ar| ar.map{ "random number" } }


my_array = [[1,2,3,4],
        [5,6,7,8],
        [9,10,11,12]]
my_array.map{|ar| ar.map{ rand(100...400) }}
# => [[345, 264, 194, 157], [325, 117, 144, 149], [303, 228, 252, 199]]
Share:
10,203
Steven Harlow
Author by

Steven Harlow

I'm a dog, I be hollering at the moon.

Updated on June 05, 2022

Comments

  • Steven Harlow
    Steven Harlow almost 2 years

    I have an array:

    my_array = [[1,2,3,4],
                [5,6,7,8],
                [9,10,11,12]]
    

    I want to iterate over each "cell" and change the value to something else. How can I do this without flattening the array and recomposing. Something like:

       my_array.each_with_index do |row, row_index|
          row.each_with_index do |cell, col_index|
            my_array[row_index][col_index] = random_letter
          end
        end
    

    The above method doesn't exactly turn out how I would think (the random letter's work, but each row has the same random letters as the last row, in the same order)

    Thoughts?