Ruby中能否为include?方法传入多个参数?
优化Ruby中检查数组包含多个元素的写法
首先,你尝试的两种写法行不通的原因:
include?("ABC", "CBA"):Ruby的Array#include?方法只接受单个参数,传递多个参数会触发参数数量错误。include?("ABC" || "CBA"):||是逻辑或运算符,这里会先计算"ABC" || "CBA"的结果(永远是"ABC"),所以实际只检查数组是否包含"ABC",达不到“检查任意一个元素”的目的。
下面是几种更简洁优雅的优化方案:
方案1:使用逻辑或(最直观的写法)
直接用||连接多个include?判断,逻辑或本身会返回布尔值,不需要嵌套三元运算符:
def coffee_drink?(drink_list) drink_list.include?("coffee") || drink_list.include?("espresso") end
这种写法适合元素数量少的场景,可读性极强。
方案2:使用any?方法(Ruby式写法)
用any?遍历目标元素集合,检查是否有任意一个元素存在于数组中,适合需要检查多个元素的场景:
def coffee_drink?(drink_list) %w[coffee espresso].any? { |drink| drink_list.include?(drink) } end
如果想更简洁,还可以用符号传递方法:
def coffee_drink?(drink_list) %w[coffee espresso].any?(&drink_list.method(:include?)) end
方案3:使用数组交集
利用数组的&运算符计算交集,若交集不为空则说明数组包含目标元素:
def coffee_drink?(drink_list) !(drink_list & %w[coffee espresso]).empty? end
或者更简洁的写法,直接判断交集是否有元素:
def coffee_drink?(drink_list) (drink_list & %w[coffee espresso]).any? end
内容的提问来源于stack exchange,提问作者Blake
相关产品推荐
相关产品推荐

