代码之家  ›  专栏  ›  技术社区  ›  Andrei

查找两个数组中的差异[重复]

  •  -1
  • Andrei  · 技术社区  · 7 年前

    在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 回复  |  直到 7 年前
        1
  •  3
  •   mikej heading_to_tahiti    7 年前

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

    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)
    
        2
  •  1
  •   Karthik P R    7 年前

    使用array\u 1-array\u 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)