填充稀疏数组

ast*_*nic 0 ruby arrays algorithm

我有一个稀疏数组,例如:

rare = [[0,1], [2,3], [4,5], [7,8]]
Run Code Online (Sandbox Code Playgroud)

我想用这些数据绘制图表,每对都是点坐标.如你所见,我没有x = 1,x = 3,x = 5,x = 6的分数

我想用以前的值填充数组,所以对于上面的例子,我将得到:

filled = [[0,1], [1,1], [2,3], [3,3], [4,5], [5,5], [6,5], [7,8]
Run Code Online (Sandbox Code Playgroud)

如您所见,为了计算y值,我只需使用我使用的最后一个y值.

完成此任务的最佳方法是什么?

Mla*_*vić 6

Range.new(*rare.transpose.first.sort.values_at(0,-1)).inject([]){|a,i|
  a<<[i, Hash[rare][i] || a.last.last]
}
Run Code Online (Sandbox Code Playgroud)

分步说明:

  1. rare.transpose.first.sort.values_at(0,-1)找到min和max x([0,7]在你的例子中)
  2. Range.new()从中得出一个范围(0..7)
  3. inject遍历范围和每个x返回对[x,y],其中y:
    1. y 来自输入数组,在哪里定义
    2. y 来自先前评估的对,哪里没有

注意:以下是查找min和max x的其他一些方法:

[:min,:max].map{|m| Hash[rare].keys.send m}
rare.map{|el| el.first}.minmax # Ruby 1.9, by steenslag
Run Code Online (Sandbox Code Playgroud)