Есть что-нибудь общее? Вы можете использовать оператор пересечения: &
[ 1, 1, 3, 5 ] & [ 1, 2, 3 ] #=> [ 1, 3 ]
Однако если вы ищете полное пересечение (с дубликатами), проблема более сложная, здесь уже переполнение стека: Как вернуть пересечение массива Ruby с дублирующимися элементами? (проблема с биграммами в коэффициентах костей)
Или быстрый фрагмент , который определяет "real_intersection" и проверяет следующий тест
class ArrayIntersectionTests < Test::Unit::TestCase
def test_real_array_intersection
assert_equal [2], [2, 2, 2, 3, 7, 13, 49] & [2, 2, 2, 5, 11, 107]
assert_equal [2, 2, 2], [2, 2, 2, 3, 7, 13, 49].real_intersection([2, 2, 2, 5, 11, 107])
assert_equal ['a', 'c'], ['a', 'b', 'a', 'c'] & ['a', 'c', 'a', 'd']
assert_equal ['a', 'a', 'c'], ['a', 'b', 'a', 'c'].real_intersection(['a', 'c', 'a', 'd'])
end
end