Arrays 我试图在数组=1中找到一个元素,并在它之前和之后更改该元素

Arrays 我试图在数组=1中找到一个元素,并在它之前和之后更改该元素,arrays,ruby,Arrays,Ruby,我知道如何在数组中找到1,但我不知道如何选择前一个值和后一个值 我知道要做到这一点,我可能需要将行拆分,然后更改值,但我不确定如何在数组中选择上一个值 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] ]) i

我知道如何在数组中找到1,但我不知道如何选择前一个值和后一个值

我知道要做到这一点,我可能需要将行拆分,然后更改值,但我不确定如何在数组中选择上一个值

  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]

要在数组中查找元素,您可以使用索引,例如,对于
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==1来更改我想要更改的值

第3行呢?你不喜欢我的问题吗?好的,这里还有另一个问题:
Image[2]
?你能用我下面的例子吗?再次编辑我的答案,现在用一个希望有用的例子。