获得两个数组的确切差异

时间:2015-01-12 13:56:24

标签: ruby

我有两个数组:

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

我如何获得

array3 = [2,4,5,6]

我已尝试array1 - array2,但会返回[4,5,6]

2 个答案:

答案 0 :(得分:5)

您所描述的是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]

答案 1 :(得分:0)

您可以找到每个元素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]