使用查找表中的值填充数组

时间:2015-02-19 18:10:55

标签: ruby arrays

我正在编写一段代码,该代码采用数组并构建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​​有没有一种好方法可以从第一个数据中有效地生成第二个数组?

1 个答案:

答案 0 :(得分:1)

填写表格其余部分的一种方法是

  1. ary[0][1]添加到ary[1]
  2. 的正面
  3. 然后将ary[1][2]ary[0][2]添加到ary[2]
  4. 的前面
  5. 然后将ary[2][3]ary[1][3]ary[0][3]添加到ary[3]的前面。
  6. 等...
  7. 这是一个简单的模式,每行在前一行中向下计数:

    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