与えられた:
arr = ["a", "b", "x"]
str = "DoDox"
編集: 他のコメントが指摘したように、これは実際には最速の方法です。単一の真のステートメントが見つかったときに評価が中断されるためです。
arr.any?{|substr| str.include?(substr)}
foldlの方法: この例を使用して、式の折り畳みの力を説明しました。このソリューションは、折り畳みの例としてはやや洗練されているかもしれませんが、十分なパフォーマンスは得られません。
arr.map{|substr| str.include?(substr)}.inject{|x,y| x || y}
-map
関数は、元の文字列str
が持つ可能性のあるすべての部分文字列をマップします。inject
返された配列を繰り返し処理し、論理 OR を使用してその構成要素を比較します。配列 'arr' 内の部分文字列が検出された場合、結果は map の結果で true になります。or 関係では、map の結果のいずれかの値が true の場合に true 値を返します。any?
これは、 が検出された場合でも配列内のすべての単一の値が評価されるため、よりも遅くなりますtrue
(常にtrue
の最後に a が生成されinject
ます)。
["a", "b", "x"] -------> [false, false, true] ----------> true
map() inject()