2016-03-04 2 views
-1

У меня есть массивы:Проверка, если элемент массива входят в другом массиве

a = [1,3,4,5] 
b = [1,2,3] 

есть ли короткий путь, чтобы проверить, как следует?

a.include? b 

Она должна возвращать true, как 3 есть.

Мы можем сделать:

b.each do |bb| 
puts true if a.include? bb 
end 

, но это не лучший способ перебрать большой массив. Или:

c = [2,4] 
a.include? b 

должен возвращать true без итерации.

+0

Ваше именование '' включают весьма вводящим в заблуждение?. – sawa

ответ

8

Вы можете пересечь массивы. Если пересечение не пусто, массивы имеют общие элементы:

a = [1,2,3,4] 
b = [2,4] 

(a & b).any? # true 
!(a & b).empty? # => true 

Это довольно эффективно, как она использует временный хеш под капотом.

1

Я надеюсь, вы можете быть хотите что-то вроде intersect рода вещи, используемых в Set

require 'set' 
Set[1,3,4,5].intersect? Set[1,2,3] # => true 

Here это

1

Если я вычесть b - a и a есть некоторые элементы, которые b слишком, то новый массив из b - a имеет меньшее количество элементов, потому что b - a возвращает все элементы, которые b имеет, но a не имеет. Я могу проверить результат на исходный размер.

a = [1,3,4,5] 
b = [1,2,3] 
b.size > (b - a).size 
# => true 
0

Вы можете использовать массив перекрестку:

a = [1,2,3,4] 
    b = [2,4] 
    c = [5,6] 

Это дает следующие результаты:

(a & b).any? 
    # true 
    (a & c).any? 
    # false 
Смежные вопросы