我正在编写一段代码,该代码采用数组并构建x x 他们的产品阵列。
由于网格中网格中的值是对称的,我考虑计算网格的一半,然后使用查找表填充缺失的项目。
我有一个如下所示的值数组:
[1,2,3,4,5],
[4,6,8,10],
[9,12,15],
[16,20],
[25]
我正在尝试构建一个如下所示的数组:
[1,2,3,4,5],
[2,4,6,8,10],
[3,6,9,12,15],
[4,8,12,16,20],
[5,10,15,20,25]
我编写了一段代码,可以采用x,y坐标,并查找正确的值。
class MultiplicationTable
def initialize(num_ary)
@num_ary = num_ary.to_a
end
def lookup_table
@num_ary.map do |x|
@num_ary[(x-1)..-1].map do |y|
x * y
end
end
end
def lookup(a,b)
lookup_table[a][b-a]
end
end
ruby有没有一种好方法可以从第一个数据中有效地生成第二个数组?
答案 0 :(得分:1)
填写表格其余部分的一种方法是
ary[0][1]
添加到ary[1]
ary[1][2]
和ary[0][2]
添加到ary[2]
ary[2][3]
,ary[1][3]
和ary[0][3]
添加到ary[3]
的前面。这是一个简单的模式,每行在前一行中向下计数:
ary.each_with_index do |row, i|
(1..i).each { |j| row.unshift ary[i - j][i] }
end
这是你问题的答案,但你真的需要填写阵列的其余部分吗?既然它总是对称的,为什么要通过填充来浪费时间和记忆呢?
def lookup(a, b)
a, b = b, a if b < a
lookup_table[a][b - a]
end