Qual è il modo migliore, più elegante/efficiente per verificare se un array contiene elementi di un secondo array?La matrice include qualsiasi valore da un altro array?
Due esempi di seguito, nel tentativo di rispondere alla domanda fa 'alimenti' contengono alcun elemento da 'formaggi':
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 fa l'intersezione costruendo un hash, quindi non è assolutamente lo stesso di "any? {... include?}" Che scorre in ciclo ogni potenziale coppia di elementi. L'intersezione '&' è quindi un tempo lineare mentre il 'any?' Sarà quadratico. Sarebbe equivalente se 'formaggi' fosse un' Set' invece di un 'Array'. –
Quando si controlla se un array contiene un elemento di un altro array, non avrebbe più senso fare (formaggi e alimenti) .any? come questo restituisce un valore vero se gli array 'contengono effettivamente uno degli stessi elementi? –
@RyanFrancis, docs: 'any?': * Il metodo restituisce true se il blocco restituisce mai un valore diverso da false o nil. * 'Vuoto?': * Restituisce true se self non contiene elementi. * – Nakilon