【问题标题】:Get the exact differences of two arrays获取两个数组的确切差异
【发布时间】:2015-01-12 22:57:41
【问题描述】:

我有两个数组:

array1 = [1,2,2,4,5,6]
array2 = [2,1]

如何获得

array3 = [2,4,5,6]

我试过array1 - array2,但它返回[4,5,6]

【问题讨论】:

    标签: ruby


    【解决方案1】:

    您所描述的是multiset。标准库中没有实现,但是可以使用multiset gem

    require 'multiset'
    
    ms1 = Multiset.new([1, 2, 2, 4, 5, 6])
    ms2 = Multiset.new([2, 1])
    
    ms1 - ms2
    #=> #<Multiset:#1 2, #1 4, #1 5, #1 6>
    
    (ms1 - ms2).to_a
    #=> [2, 4, 5, 6]
    

    【讨论】:

      【解决方案2】:

      你可以找到每个元素的index并删除那个,如this answer所示:

      array1 = [1,2,2,4,5,6]
      array2 = [2,1]
      
      array2.each { |obj| array1.delete_at(array1.index(obj) || array1.length) }
      
      array1 #=> [2, 4, 5, 6]
      

      【讨论】:

      • 我是红宝石新手。 “|| length”在该语句中做了什么?
      • a || b 如果a 是假的,则返回b,即nilfalse。在上面的代码中,如果在array1 中找不到objarray1.index(obj) 返回nil。并且由于array1.delete_at(nil) 会导致错误,array1.delete_at(array1.length) 被用作后备。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多