0

文字列に配列の部分文字列が含まれているかどうかを確認するにはどうすればよいですか?

鍵だと思ってinclude?いたのですが、どうやらそうではないようです...

arr = ["aa", "bb", "cc"]
str = "mystringcc"
str.include?(*arr)
ArgumentError: wrong number of arguments (given 3, expected 1)

上記の例では、配列の要素である がtrue文字列に含まれているため、結果は次のようになると予想されます。"cc"

4

4 に答える 4

-1

与えられた:

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()
于 2017-05-16T14:46:00.933 に答える