Я пытаюсь создать метод, который случайным образом заполняет массив массивов размером 10 x 10, первоначально заполненный 0
, с 1
.Вставка значений случайным образом в массив массивов
class World
attr_accessor :grid
def initialize w, h, p = 0
@width = w
@height = h
@grid = span(@height, span(@width))
populate(p)
end
def span dim = 10, val = 0
out = []
(1..dim).each do |x|
out.push(val)
end
return out
end
def populate population
population.times do
puts "#{rand(@height)} #{rand(@width)}"
@grid[rand(@height)][rand(@width)] = 1
end
end
def show
@grid.each do |row|
puts row.join("")
end
end
end
world = World.new(10, 10, 5)
puts world.grid.to_s
Я пробовал несколько различных подходов, и каждый раз, когда мой выход что-то вроде:
2 4
9 3
5 6
0 8
5 6
0100101100
0100101100
0100101100
0100101100
0100101100
0100101100
0100101100
0100101100
0100101100
0100101100
@grid[rand(@height)][rand(@width)]
Почему, кажется, имеют те же ключи, каждый итерации, несмотря на puts "#{rand(@height}} #{rand(@width)}"
показывает изменение значения?
Я думаю, что вы хотите что-то вроде '@grid = Array.new (10) {Array.new (10) {[rand (@height)] [rand (@width)]}}'. Это даст вам массив из 10 элементов, каждый из которых представляет собой массив из 10 элементов, каждый из которых представляет собой массив '[rand (@height), rand (@width)]'. –
Я согласен, что это лучший подход, но мне очень хотелось бы знать, почему это не работает, для дальнейшего использования. – RobertAKARobin
Конечно ... –