找出2个数组的差异

时间:2018-03-27 17:20:03

标签: ruby-on-rails ruby computer-science

在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

2 个答案:

答案 0 :(得分:3)

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

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

这将返回一个包含2个差异的数组,但您可以将其解压缩到呼叫左侧的2个独立变量中,完全按照您提到的方式进行:

difference_1, difference_2 = ruby_method(array_1, array_2)

答案 1 :(得分:1)

当您使用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)