Ruby как создать двумерный массив букв

Я пытаюсь создать двумерный массив NxN и заполнить его буквами. У меня есть способ создать 2d-массив, но как я могу перебирать каждую строку и столбец и назначать ему случайную букву?

class Array2D
    def initialize(width, height)
        @data = Array.new(width) { Array.new(height) }
    end
    def [](x, y)
        @data[x][y]
    end
    def []=(x, y, value)
        @data[x][y] = value
    end
end

person user2527785    schedule 18.11.2013    source источник
comment
Если это NxN, то почему initialize принимает width и height отдельно?   -  person sawa    schedule 18.11.2013
comment
Если это NxN, то почему initialize принимает width и height отдельно?   -  person sawa    schedule 18.11.2013
comment
@sawa Ты можешь повторить это еще раз!   -  person vgoff    schedule 20.11.2013
comment
Если это NxN, то почему initialize принимает width и height отдельно?   -  person sawa    schedule 20.11.2013


Ответы (3)



Вы можете использовать карту !:

def initialize(width, height)
    @data = Array.new(width) { Array.new(height) }
    letters = ('a'..'z').to_a
    @data.map!{|row| row.map!{letters.sample}}
end

p Array2D.new(2,2) #=> <Array2D:0x1d43a50 @data=[["k", "x"], ["h", "f"]]>
person hirolau    schedule 18.11.2013

... или вы можете просто превратить 2D-массив в простой массив с N * N элементами и использовать простую арифметику с двумя индексами для извлечения и установки элементов матрицы, что значительно упростит инициализацию и итерацию. Хотя это может вызвать проблемы с некоторыми другими операциями, это зависит от того, как вы собираетесь использовать эту структуру.

person Anton    schedule 18.11.2013