反向包含数组?

时间:2012-05-14 03:34:46

标签: ruby

我想检查数组中的任何项是否是字符串的一部分。像.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

3 个答案:

答案 0 :(得分: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?

答案 1 :(得分:2)

试试这个:

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

arr.any? { |el| str.include? el }
=> true 

答案 2 :(得分:1)

我会做这样的事情:

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

索引将返回truthy / falsy值,因此这可能是“最干净”的方法。我还会包括?在函数定义的最后,只是为了更清楚地说明它应该如何使用以及期望的结果。