我了解如何在数组中找到1,但不确定如何选择前一个值和后一个值
我知道要这样做,我可能需要将行并.split它然后更改值,但是不确定如何选择数组中的前一个值
def output_image
@matrix.each do |row|
puts row.join(" ")
end
end
end
image = Image.new([
[0, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 0, 1],
[0, 0, 0, 0]
])
image.output_image
the expected result would be row 2 outputs [1, 1, 1, 0]
答案 0 :(得分:1)
要在数组中查找元素,可以使用索引,例如对于a = [1,2,3]
,您将使用a[0]
获得第一个值。要获取先前的索引,可以使用a[i - 1]
或a[i + 1]
,其中i是当前索引。
我建议使用
def output_image
@matrix.each do |row|
column_with_one_index = row.index(1)
next if column_with_one_index.nil?
row[column_with_one_index - 1] = 'prev'
row[column_with_one_index + 1] = 'next'
row.join(" ")
end
puts @matrix.inspect
end
结果将是:
[
[0, 0, 0, 0],
["prev", 1, "next", 0],
[0, 0, "prev", 1, "next"],
[0, 0, 0, 0]
]
或者,要完全返回您描述的结果,请使用:
class Image
def initialize(array)
@matrix = array
end
def output_image
@matrix.each_with_index do |row, i|
column_with_one_index = row.index(1)
next if column_with_one_index.nil?
row[column_with_one_index - 1] = 'prev'
row[column_with_one_index + 1] = 'next'
end
@matrix.map do |row| row.join(" ") end
end
end
image = Image.new([
[0, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 0, 1],
[0, 0, 0, 0]
])
puts image.output_image
然后,使用地图,结果将是
0 0 0 0
prev 1 next 0
0 0 prev 1 next
0 0 0 0
答案 1 :(得分:0)
对不起,我知道了。我需要在一个循环内做一个循环。循环遍历第一个数组,然后逐个循环遍历每一行,存储该数组的值,然后使用行,列索引-1 == 1更改我想要的