查找具有重复项的两个数组的相同内容

Blu*_*ber 0 ruby

我想找到两个数组之间相同的所有元素,包括在两个数组中重复多次的元素.例如,我想要

[1,1,1,2]
Run Code Online (Sandbox Code Playgroud)

[1,1,3,4]
Run Code Online (Sandbox Code Playgroud)

[1,1]
Run Code Online (Sandbox Code Playgroud)

我可以遍历数组并跟踪它,但我想知道是否有更多的红宝石方式这样做.

Jör*_*tag 5

看起来你想要多重交叉.在Ruby核心库或stdlib中没有多集数据结构,但是您可以在Web上找到多个实现.我只是随机选择一个(这并不重要,multiset是一个具有严格定义的数学概念,所有实现的行为或多或少都相同):

require 'multiset'

ms = Multiset[1, 1, 1, 2] & Multiset[1, 1, 3, 4]
#=> #<Multiset:#2 1>

ms.to_a
#=> [1, 1]
Run Code Online (Sandbox Code Playgroud)

如果必须,你可以使用它将它转换为数组Multiset#to_a,但请记住:你可以调用的大多数有趣的方法Array实际上来自Enumerablemixin,因此可用于所有集合; 你通常不需要有一个数组.