给定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]}
但我的上述解决方案既不是最佳的,也不是理想的。任何人都可以帮我一把吗?
答案 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
需要一个块而不是返回一个枚举器。