如何在 4 X 4 数组红宝石中分配值



我正在创建一个包含四个元素的数组@multi,每个元素都是一个4-element数组。在下面的示例中,类 Test 有一个方法assign_values该方法要传递两个参数,一个或多个双元素数组的数组,[i,j]("位置"(和一个值v,这意味着@multi[i][j]应设置为等于v

该方法result在所有未赋值元素都设置为等于 '-' 后返回@multi

用户输入将是如下所示的数组位置:

Alpha_array = [[0,1], [2,3], [3,2]]
Beta_array = [[0,3], [3,1], [1,0]]

我想要的输出是

# => [["-", "A", "-", "B"], ["-B", "-", "-", "-"], ["-", "-", "-", "A"], ["-", "B", "A", "-"]]

到目前为止我尝试过什么

class Test
  def initialize
    @multi = 4.times.map { 4.times.map { '-' } }
  end
  def assign_values array, new_value
    array.each { |element|
      @multi[element[0]][element[1]] = new_value
    }
  end
  def result
    @multi
  end
end
Alpha_array = [[0,1], [2,3], [3,2]]
Beta_array = [[0,3], [3,1], [1,0]]
test = Test.new
test.assign_values(Alpha_array, 'A')
test.assign_values(Beta_array, 'B')
test.result

输出:

# => [["-", "A", "-", "B"], ["-B", "-", "-", "-"], ["-", "-", "-", "A"], ["-", "B", "A", "-"]]

有没有一种优雅而有效的方法来获得输出?

class Test
  attr_reader :result
  def initialize(dim1, dim2)
    @result = Array.new(dim1) { Array.new(dim2, '-') }
  end
  def assign_values(array, new_value)
    array.each { |i,j| @result[i][j] = new_value }
  end
end
test = Test.new(4,4)
test.assign_values([[0,1], [2,3], [3,2]], 'A')
test.assign_values([[0,3], [3,1], [1,0]], 'B')
test.result
  #=> [["-", "A", "-", "B"],
  #    ["B", "-", "-", "-"],
  #    ["-", "-", "-", "A"],
  #    ["-", "B", "A", "-"]]

请参见数组::新。

最新更新