如何在Ruby中找到数组项的区别

时间:2014-04-27 13:11:19

标签: ruby

我试图找到两个数组项的区别。例如,我期待来自[-1, -4], [-2, 4], [1, -2]的{​​{1}}。但是我得到一个错误,`transpose':没有将nil隐式转换为Array(TypeError)。

[arr[i],arr[i+1]].transpose.map{|x| x.reduce(:-)}

我在这里做错了什么? Ruby的新手。

2 个答案:

答案 0 :(得分:3)

您可能想尝试each_cons

arr = [[1,1],[2,5],[4,1],[3,3]]

def dosomething(myarr)
  puts myarr.to_s
end

arr.each_cons(2) do |pairs|
  myarr = pairs.transpose.map{|x| x.reduce(:-)}
  dosomething(myarr)
end
# [-1, -4]
# [-2, 4]
# [1, -2]

答案 1 :(得分:0)

另一种计算do_something参数的方法是使用Ruby的Matrix类和Array#zip

require 'matrix'

arr = [[1,1],[2,5],[4,1],[3,3]]

diff = arr[0..-2].zip(arr.drop(1)).map { |a,b| (Matrix[a] - Matrix[b]).to_a }
  #=> [[[-1, -4]], [[-2, 4]], [[1, -2]]]