¿Cuál es la mejor manera, la más elegante/eficiente para probar si una matriz contiene algún elemento de una segunda matriz?¿La matriz incluye algún valor de otra matriz?
Dos ejemplos a continuación, tratando de responder a la pregunta hace 'alimentos' contienen ningún elemento de los 'quesos':
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 hace la intersección construyendo un hash, por lo que definitivamente no es lo mismo que 'any? {... include?}' Que recorrerá cada posible par de elementos. La intersección '&' es, por tanto, tiempo lineal, mientras que 'any?' Será cuadrático. Sería equivalente si "quesos" fuera un "conjunto" en lugar de un "conjunto". –
Al verificar si una matriz contiene un elemento de otra matriz, ¿no tendría más sentido hacer (quesos y alimentos) .any? ya que esto devuelve un valor verdadero si las matrices de hecho contienen alguno de los mismos elementos? –
@RyanFrancis, documentos: 'any?': * El método devuelve verdadero si el bloque alguna vez devuelve un valor distinto de falso o nulo. * 'Empty?': * Devuelve verdadero si el auto no contiene elementos. * – Nakilon