我想找到两个数组之间相同的所有元素,包括在两个数组中重复多次的元素.例如,我想要
[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)
我可以遍历数组并跟踪它,但我想知道是否有更多的红宝石方式这样做.
看起来你想要多重交叉.在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,因此可用于所有集合; 你通常不需要有一个数组.