Проверьте, является ли массив подмножеством другого массива в Ruby - программирование

Проверьте, является ли массив подмножеством другого массива в Ruby

Как я могу проверить, является ли один массив подмножеством другого массива, независимо от порядка элементов?

a1 = [3, 6, 4]
a2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

...?

a1 is a subset of a2
4b9b3361

Ответ 1

Используйте наборы. Затем вы можете использовать set.subset?. Пример:

require 'set'

a1 = Set[3,6,4]
a2 = Set[1,2,3,4,5,6,7,8,9]

puts a1.subset?(a2)

Вывод:

true

Посмотрите, как он работает в Интернете: ideone

Ответ 2

Самый простой способ:

(a1 - a2).empty?

Ответ 3

Структура данных, которую вы уже имеете, идеальна, просто проверьте пересечение:

(a1 & a2) == a1

Обновление: комментарий, обсуждающий перестановки, интересен и креативен, но совершенно неверен, поскольку разработчики Ruby предвосхитили эту проблему и указали, что порядок результата - это порядок a1. Таким образом, это работает и будет продолжать работать в будущем. (Массивы - это упорядоченные структуры данных, а не множества. Вы не можете просто переставить порядок операции с массивом.)

Мне нравится Dave Newton отвечать за хладнокровие, но этот ответ также работает, и, как и Dave's, также является основным Ruby.

Ответ 4

Возможно, не быстрый, но вполне читаемый

def subset?(a,b)
  a.all? {|x| b.include? x}
end