2011-11-07 4 views
7
私は配列の文字列を持っています: phrases = ["Have a good Thanksgiving", "Eat lots of food"]

Ruby - 文字列に配列内のすべての単語が含まれているかどうかをチェックする方法

別の配列の単語が1つあります:words = ["eat", "food"]

文字列に2番目の配列のすべての単語が含まれている場合、

words


phrases.select{ |x| x.include_all?(words) }

words関数を作成してwords配列の各メンバーを繰り返し処理するか、比較を行うか、組み込みメソッドがありますか?行方不明?

+0

部分的なマスキングはどうですか?つまり、単語= "食べる"フレーズ= ["私は肉が好きではありません] – tokland

答えて

11

あなたは実際にはソリューションに非常に近いです。

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

all?Enumerable方法が上にあり、ブロックは、コレクション内の各項目に対して真と評価された場合に真を返します。

単語を「含む」というフレーズの正確な定義に応じて、独自のinclude_all?メソッドを定義するか、Stringのメソッドで一致を判断することができます。 include?メソッドでは大文字と小文字が区別され、単語の境界は気にしません。それらがあなたの要件でない場合は、include?の代わりにRegexpを使用するか、独自の方法を定義してそのロジックを上書きすることができます。

+0

それは、ありがとうございます。私はちょうど大文字小文字が問題ではないことを確認するために比較されるフィールドに 'upcase'を呼び出しました。 – johnnycakes

関連する問題