【发布时间】: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
我有两个数组:
array1 = [1,2,2,4,5,6]
array2 = [2,1]
如何获得
array3 = [2,4,5,6]
我试过array1 - array2,但它返回[4,5,6]。
【问题讨论】:
标签: ruby
您所描述的是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]
【讨论】:
你可以找到每个元素的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]
【讨论】:
a || b 如果a 是假的,则返回b,即nil 或false。在上面的代码中,如果在array1 中找不到obj,array1.index(obj) 返回nil。并且由于array1.delete_at(nil) 会导致错误,array1.delete_at(array1.length) 被用作后备。