计算数组元素之间的差异

时间:2011-01-11 21:02:07

标签: ruby-on-rails ruby

给定n个整数的排序数组,如下所示:

ary = [3, 5, 6, 9, 14]

我需要计算每个元素与数组中下一个元素之间的差异。使用上面的例子,我最终得到:

[2, 1, 3, 5]

起始数组中可能包含0,1或许多元素,我将要处理的数字会大得多(我将使用纪元时间戳)。我尝试了以下内容:

times = @messages.map{|m| m.created_at.to_i}
left  = times[1..times.length-1]
right = times[0..times.length-2]
differences = left.zip(right).map { |x| x[0]-x[1]}

但我的上述解决方案既不是最佳的,也不是理想的。任何人都可以帮我一把吗?

3 个答案:

答案 0 :(得分:41)

>> ary = [3, 5, 6, 9, 14] #=> [3, 5, 6, 9, 14]
>> ary.each_cons(2).map { |a,b| b-a } #=> [2, 1, 3, 5]

修改inject替换为map

答案 1 :(得分:7)

类似但更简洁:

[3, 5, 6, 9, 14].each_cons(2).collect { |a,b| b-a }

答案 2 :(得分:1)

替代方案:

a.map.with_index{ |v,i| (a[i+1] || 0) - v }[0..-2]

在Ruby 1.8中不起作用,其中map需要一个块而不是返回一个枚举器。