Ruby中实现两数组差异计算,是否有更优雅的写法?
实现Ruby数组的双向差异解构赋值
嘿,这个需求很合理!Ruby标准库本身确实没有直接提供能一次性返回两个数组双向差异的方法,但我们可以自己封装一个超优雅的实现,完美适配你想要的解构赋值写法。
方法一:封装独立工具方法
最简单的方式是写一个独立方法,接收两个数组,返回包含两个差异结果的数组:
def two_way_diff(arr1, arr2) [arr1 - arr2, arr2 - arr1] end
然后你就可以像这样用解构赋值直接获取两个差异数组:
array_1 = [1,2,3] array_2 = [3,4,5] difference_1, difference_2 = two_way_diff(array_1, array_2) difference_1.each { |num| some_method_z(num) } # 处理array_1独有的元素 difference_2.each { |num| some_method_x(num) } # 处理array_2独有的元素
方法二:扩展Array类实例方法
如果你觉得调用独立方法不够直观,还可以给Array类扩展一个实例方法,让代码更符合Ruby的风格:
class Array def two_way_diff(other_arr) [self - other_arr, other_arr - self] end end # 调用起来更自然: difference_1, difference_2 = array_1.two_way_diff(array_2)
临时使用的简化写法
如果只是临时用一次,不想单独封装方法,也可以直接在解构赋值里写逻辑:
difference_1, difference_2 = [array_1 - array_2, array_2 - array_1]
这种写法把重复的差异计算逻辑封装起来,代码更简洁易读,解构赋值也让你的意图一目了然——一眼就能看出来你要分别处理两个数组的独有元素,完全符合你想要的优雅风格。
内容的提问来源于stack exchange,提问作者Andrei
相关产品推荐
相关产品推荐

