Есть ли способ проверить, содержит ли массив A все элементы массива B?
Ruby - содержит ли массив A все элементы массива B
Ответ 1
Это должно работать для того, что вам нужно:
(a & b) == b
Ответ 2
Вы можете попробовать это
a.sort.uniq == b.sort.uniq
или
(a-b).empty?
И если [1,2,2] != [1,2]
в вашем случае вы можете:
a.group_by{|i| i} == b.group_by{|i| i}
Ответ 3
Вы можете использовать класс Ruby Set
:
>> require 'set' #=> true
>> a = [*1..5] #=> [1, 2, 3, 4, 5]
>> b = [*1..3] #=> [1, 2, 3]
>> a.to_set.superset? b.to_set #=> true
Для небольших массивов я обычно делаю то же, что предложил fl00r:
>> (b-a).empty? #=> true
Ответ 4
Я предпочитаю делать это с помощью: (b - a).blank?
# говорит, что b содержится в
Ответ 5
Самый простой способ:
(b-a).empty?
Ответ 6
Также существует класс Set (часть стандартной библиотеки), который позволит вам просто проверить, является ли B подмножеством A, например
>> a = [1,2,3,4,5] => [1, 2, 3, 4, 5]
>> b = [3,4,5] => [3, 4, 5]
>> require 'set' => true
>> set_a = a.to_set => #<Set: {1, 2, 3, 4, 5}>
>> set_b = b.to_set => #<Set: {3, 4, 5}>
>> set_b.subset? set_a => true
Ответ 7
Вы можете проверить класс Set в библиотеке Ruby Standard. Метод proper_subset?
, вероятно, сделает то, что вы хотите.
Ответ 8
Рубин 2. 6+
Для этой цели в Ruby введена difference
в 2.6.
Очень быстро, очень читабельно, следующим образом:
a = [1, 2, 3, 4, 5, 6]
b = [1, 2, 3, 4, 5, 6]
a.difference(b).any?
# => false
a.difference(b.reverse).any?
# => false
a = [1, 2, 3, 4, 5, 6]
b = [1, 2, 3]
a.difference(b).any?
# => true
Надеюсь, что это помогает кому-то!