2011-11-07 11 views
7

que tienen una matriz de cadenas: phrases = ["Have a good Thanksgiving", "Eat lots of food"]Ruby: cómo comprobar si una cadena contiene todas las palabras de una matriz?

tengo otra serie de palabras sueltas: words = ["eat", "food"]

quiero devolver las entradas de la primera matriz si la cadena contiene todas las palabras en la segunda matriz.

Por lo tanto, debería ser algo como esto:
phrases.select{ |x| x.include_all?(words) }

¿Debo crear la función include_all? para iterar a través de cada miembro de la matriz words y hacer la comparación, o hay alguna métodos incorporados I ¿Me falta?

+0

¿qué ocurre con el cálculo matemático parcial? es decir, palabra = "comer" frases = ["No me gusta la carne"] – tokland

Respuesta

11

En realidad, está muy cerca de la solución.

phrases.select do |phrase| 
    words.all?{ |word| phrase.include? word } 
end 

El método all? está en Enumerable, y devuelve verdadero si el bloque se evalúa como verdadera para cada elemento de la colección.

Dependiendo de cuál sea exactamente su definición de la frase "que incluye" la palabra, puede definir su propio método include_all?, o un método en String para determinar la coincidencia. El método include? distingue entre mayúsculas y minúsculas y no se preocupa por los límites de palabras. Si esos no son sus requisitos, puede usar una Regexp en lugar de include? o definir su propio método para completar esa lógica.

+0

Eso funciona, gracias. Acabo de llamar a 'upcase' en los campos que se comparan para garantizar que el caso no sea un problema. – johnnycakes

Cuestiones relacionadas