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

时间:2019-08-02 22:01:52

标签: arrays ruby

我了解如何在数组中找到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]

2 个答案:

答案 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更改我想要的