Ответ 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
Как я могу проверить, является ли один массив подмножеством другого массива, независимо от порядка элементов?
a1 = [3, 6, 4]
a2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
...?
a1 is a subset of a2
Используйте наборы. Затем вы можете использовать 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
Самый простой способ:
(a1 - a2).empty?
Структура данных, которую вы уже имеете, идеальна, просто проверьте пересечение:
(a1 & a2) == a1
Обновление: комментарий, обсуждающий перестановки, интересен и креативен, но совершенно неверен, поскольку разработчики Ruby предвосхитили эту проблему и указали, что порядок результата - это порядок a1
. Таким образом, это работает и будет продолжать работать в будущем. (Массивы - это упорядоченные структуры данных, а не множества. Вы не можете просто переставить порядок операции с массивом.)
Мне нравится Dave Newton отвечать за хладнокровие, но этот ответ также работает, и, как и Dave's, также является основным Ruby.
Возможно, не быстрый, но вполне читаемый
def subset?(a,b)
a.all? {|x| b.include? x}
end