我正在使用二维数组创建网格,我想在其中添加不同的值 我试过了:
grid =(Array.new(10,Array.new(10," ") ))
for row in rand(1..9)
for column in rand(1..9)
grid[row][column] == 'a'
答案 0 :(得分:2)
grid = Array.new(10) { Array.new(10, "") }
否则你会重复10次相同的数组,这可能不是你想要的。
我不确定你想要对你的迭代做什么。请注意,Ruby数组是0索引的,因此10个元素的数组将具有0...9
中的索引。另请注意,对数组的迭代通常使用each
完成,正如Carpetsmoker在评论中所说:
grid.each do |row|
row.each_index do |index|
row[index] = "abcde"[rand(5)]
end
end
编辑:谢谢卡里!
答案 1 :(得分:1)
你的问题不明确。如果您想在n
的{{1}}随机位置添加字母'a',您可以这样做:
grid
你可以写一下:
def salt(grid, obj, n)
m = grid.size
locs = (0...m*m).to_a.sample(n)
locs.each do |l|
row, col = l.divmod(m)
grid[row][col] = obj
end
end
grid = Array.new(10) { Array.new(10, ' ') }
salt(grid,'a',30)
grid
#=> [[" ", "a", " ", " ", "a", "a", "a", " ", " ", " "],
# ["a", "a", " ", "a", "a", " ", " ", "a", " ", " "],
# [" ", "a", " ", " ", "a", " ", " ", " ", "a", " "],
# [" ", " ", " ", "a", " ", " ", "a", " ", " ", "a"],
# [" ", " ", " ", "a", " ", " ", " ", " ", " ", " "],
# [" ", " ", "a", " ", " ", " ", " ", " ", " ", " "],
# ["a", " ", " ", " ", " ", " ", "a", " ", " ", "a"],
# [" ", " ", "a", " ", " ", "a", " ", "a", " ", " "],
# [" ", "a", " ", " ", "a", " ", " ", " ", "a", "a"],
# [" ", " ", "a", "a", "a", " ", " ", " ", " ", " "]]
但这可能会导致一些重复,在这种情况下,locs = n.times.map { rand(m*m) }
个单元格将被n
填充少于"a"
个单元格。例如,当我为locs
计算n=30
时,我找到了:
locs.uniq.size
#=> 27