Какой лучший, самый элегантный/эффективный способ проверить, содержит ли массив какой-либо элемент из второго массива?Array включает любое значение из другого массива?
Два примера ниже, пытаясь ответить на вопрос, означает 'пища' содержит какой-либо элемент из 'сыров':
cheeses = %w(chedder stilton brie mozzarella feta haloumi)
foods = %w(pizza feta foods bread biscuits yoghurt bacon)
puts cheeses.collect{|c| foods.include?(c)}.include?(true)
puts (cheeses - foods).size < cheeses.size
Ruby делает пересечение, создавая хэш, поэтому он определенно не совпадает с «any? {... include?}», Который будет циклически проходить через каждую потенциальную пару элементов. Таким образом, пересечение '&' представляет собой линейное время, а 'any?' Будет квадратичным. Это было бы эквивалентно, если бы «сыры» были «Set» вместо «Array». –
При проверке, содержит ли массив элемент из другого массива, не имеет смысла делать (сыры и продукты) .any? как это возвращает истинное значение, если массивы действительно содержат какие-либо из этих элементов? –
@RyanFrancis, docs: 'any?': * Метод возвращает true, если блок когда-либо возвращает значение, отличное от false или nil. * 'Empty?': * Возвращает true, если self не содержит элементов. * – Nakilon