0

配列の項目が string の一部であるかどうかを確認したい。何かのようなもの.include?

そのための関数を書きましたが、もっと簡単な方法があると確信しています。

誰かが同じことを達成するために少ないコードを使用する方法を提案できますか?

$goes_into_cron_comments=["Edumate_upgrade","login"].map!{|item| item.downcase} 
params={}
params['run']="login_ldap"

def contains(array,string)
        array.each{|item| 
            if string.include?(string)
                return true
            end
        }
        return false
end
#if ($goes_into_cron_comments.include?(params['run'].downcase)) #original condition
if (contains($goes_into_cron_comments,params['run'].downcase))
    puts "contains"
else 
    puts "doesn't contain"
end
4

3 に答える 3

3

もっといいことができることがあります。Enumerable#any?手作業で繰り返すのではなく、使用することができます。

array.any? { |item| string.include?(item) }

または、次を使用できますRegexp.union

string =~ Regexp.union(array)
# or if you want a true boolean
!!(string =~ Regexp.union(array))
!(string =~ Regexp.union(array)).nil?
于 2012-05-14T03:49:10.520 に答える
2

これを試して:

str = 'hey, this is a string'
arr = %w{one hey may}

arr.any? { |el| str.include? el }
=> true 
于 2012-05-14T03:45:11.053 に答える
1

私はちょうどこのようなことをします:

def contains?(array,string)
    array.index{|item| string.include?(item)}
end

インデックスは真/偽の値を返すため、これがおそらく「最もクリーンな」方法です。? も含めます。関数定義の最後に、関数の使用方法と期待される結果を明確にするためだけに。

于 2012-05-14T03:43:29.503 に答える