找出2个数组的差异

Finding the differences in 2 arrays

在Ruby中是否有更优雅的方法来完成以下操作?

array_1 = [1,2,3]
array_2 = [3,4,5]

(array_1 - array_2).each do |num|
  some_method_z(num)
end

(array_2 - array_1).each do |num|
  some_method_x(num)
end

例如--希望能够做类似的事情:

difference_1, difference_2 = ruby_method(array_1, array_2)

相当于:

difference_1 = array_1 - array_2
difference_2 = array_2 - array_1

您可以按照以下方式编写自己的方法:

def ruby_method(array_1, array_2)
  [array_1 - array_2, array_2 - array_1]
end

这将 return 一个具有 2 个差异的数组,但您可以完全按照您提到的方式在调用的左侧将其解压缩为 2 个单独的变量:

difference_1, difference_2 = ruby_method(array_1, array_2)

当您使用 array_1 - array_2 可能会在您的情况下给出不合适的结果,

假设你有,

array_1 = [1, 2, 3] 
array_2 = [1, 3, 4] 
array_1 - array_2 = [2]

所以在你的情况下,你需要使用以下内容

difference_1 = array_1.map.with_index { |v, i| v-array_2[i] }
difference_2 = array_2.map.with_index { |v, i| v-array_1[i] }

如果您想将其添加为方法

def find_difference(array_1, array_2)
  difference_1 = array_1.map.with_index { |v, i| v-array_2[i] }
  difference_2 = array_2.map.with_index { |v, i| v-array_1[i] }
  return [difference_1, difference_2]
end

你可以打电话,

difference_array = find_difference(array_1, array_2)