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 回答