Подтвердить что ты не робот

Ruby - содержит ли массив A все элементы массива B

Есть ли способ проверить, содержит ли массив A все элементы массива B?

4b9b3361

Ответ 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

http://www.ruby-doc.org/stdlib/libdoc/set/rdoc/index.html

Ответ 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

Надеюсь, что это помогает кому-то!