Внутри массивов у меня есть 0
и один 1
.Изменяемые элементы в многомерном массиве
class Image
def initialize(rows)
@rows = rows
end
end
image = Image.new([
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
])
Я хочу, чтобы номер, которые расположены вверх, вниз, влево и вправо, чтобы повернуть 1
, а также. Я попытался сделать это, манипулируя column_index
и row_index
. Код:
class Image
def blur
@rows_copy = Array.new(@rows.size) {Array.new(@rows.first.size)}
@rows.each_with_index do |row, row_index|
row.each_with_index do |cell, column_index|
blur_location(row_index,column_index)
end
end
@rows = @rows_copy
end
def blur_location (row_index, column_index)
if @rows[row_index][column_index] == 1
@rows_copy[row_index][column_index] = 1
@rows_copy[row_index + 1][column_index] = 1
@rows_copy[row_index - 1][column_index] = 1
@rows_copy[row_index][column_index + 1] = 1
@rows_copy[row_index][column_index - 1] = 1
else
@rows_copy[row_index][column_index] = 0
end
end
def output_image
@rows.each_with_index do |row, row_index|
puts row.join('')
end
end
end
image.blur
image.output_image
Но только половина кода работает (то есть, верхний и левый поворачивается к 1
, но не другие два).
Этот вопрос [спросил недавно] (http://stackoverflow.com/questions/28777194/two-dimensional-array-with-ruby/28777829#28777829). Я думаю, что использование класса [Матрица] (http://ruby-doc.org//stdlib-2.2.0/libdoc/matrix/rdoc/Matrix.html) - это путь, но не все согласятся. –