我正在创建一个包含四个元素的数组@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", "-"]]
请参见数组::新。