在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
答案 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)