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

rare = [[0,1], [2,3], [4,5], [7,8]]

我想用这些数据绘制一个图表,每一对都是点坐标。
如你所见,我没有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]

如您所见,为了计算y值,我只取最后一个y值。
实现这一目标的最佳方法是什么?

最佳答案

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

逐步解释:
rare.transpose.first.sort.values_at(0,-1)查找min和maxx(在您的示例中为[0,7]
Range.new()超出范围(0..7
inject遍历范围,对于每个x返回对[x,y],其中y是:
y来自输入数组,如果定义了
y来自先前评估的对,如果不是
注:以下是求最小值和最大值x的其他方法:
[:min,:max].map{|m| Hash[rare].keys.send m}
rare.map{|el| el.first}.minmax # Ruby 1.9, by steenslag

10-04 20:52