我想检查数组中的任何项是否是字符串的一部分。像.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
答案 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值,因此这可能是“最干净”的方法。我还会包括?在函数定义的最后,只是为了更清楚地说明它应该如何使用以及期望的结果。