如何确定数组是否包含其中一个元素

时间:2016-01-05 06:48:07

标签: ruby

我有一个数组

address = ["kuwait", "jordan", "United Arab Emirates", "Bahrain"]
location = "india"
order.country = "jordan" 
address.include? (location || order.country) #=> false

我的OR条件无效。请指导我错的地方。

3 个答案:

答案 0 :(得分:11)

为什么您的代码无效

以下代码行

address.include? (location || order.country)

首先评估location || order.country,根据您的示例生成"india"。然后检查它是否存在于地址数组中,基本上是它:

address.include? "india"

这是false,因此您得到false result.

同样如果你尝试:

address.include? (order.country || location)

在检查true时会返回address.include? "jordan"。因此,这不是实现目标的正确方法。

在此示例中使用Array#include的正确方法是什么?

address.include?(location) || address.include?(order.country)

答案 1 :(得分:6)

有很多方法可以实现此功能:

!(address & [location, order.country]).empty?
(address & [location, order.country]).any?
[location, order.country].any? { |addr| address.include? addr }

您的代码失败,因为location || order.country已评估为truthy(在此特定情况下调用||的第一个参数,因为"india"truthy。 )虽然你希望它被视为“数组包括这个或数组包含那个”,但它实际上是“数组包含'this或that'的结果,对于给出的例子来说显然是"india"。” / p>

答案 2 :(得分:0)

这是另一种方式:

address = ["kuwait", "jordan", "United Arab Emirates", "Bahrain"]
to_check = ["india", "jordan"]
p present = (to_check - address).size < to_check.size
#=> true