как я могу сравнить, содержит ли массив строк меньший массив строк в Ruby?
например
a=["1","2","3","4","5"]
b=["2","3"]
теперь я хочу проверить, содержит ли a b и получить истину / ложь
Спасибо.
@GaganGami нет, это неверно; &
сжимает дубликаты, что приводит к странному [1, 1] & [1, 1] == [1, 1] #⇒ false
, потому что на удивление это [1, 1] & [1, 1] == [1]
.
@mudasobwa: отметил, спасибо
Наиболее распространенный подход -
(b - a).empty?
Однако у него есть проблемы с уникальными элементами. Чтобы определить, включает ли a
элементы все из b
, следует:
a_copy = a.dup
b.all? { |e| a_copy.delete e }
# or
b.all?(&a_copy.method(:delete))
Спасибо, решил с b.all? { |x| a.include(x) }
@EnginTopuzoglu еще раз, это не сработает, если массивы могут содержать дубликаты.
Ясно, спасибо, они не содержат дубликатов, но могут, поэтому я изменил его на ваш код, все еще работаю
вы можете проверить с помощью
(a & b) == b
, он вернет логическое значениеtrue
/false