如何使用||简单编写多个比较使用Ruby on Rails

问题描述

我想这样写条件,但是太长了。 如何使它更简单?

if A
  ~~~
elsif B == b || B == c || B == d || B == e   <-- This part is too long.
  ~~~
else
  ~~~
end 

我认为它可以写成下面的样子,但是当我在Rails控制台上尝试时,它给了我一个错误

elsif B == (b || c || d || e)

解决方法

if B == b || B == c || B == d || B == e

可以写为

if [b,c,d,e].include?(B)
,

[EDIT](感谢Sergio Tulentsev的评论)这仅与更长的数组有关,涉及大约10个以上的元素,在OP所描述的确切情况下不适用。我为其他可能具有较长数组或比较列表的用户提供了此答案。 [/ EDIT]

如果速度也是一个问题:请使用Set,其include?Array快:

# at the top,load this standard library (comes with Ruby):
require 'set'
# ...
if [b,e].to_set.include?(B)

另请参见:

Array.include?比较慢。对于查找,请使用集合而不是哈希:https://stackoverflow.com/a/411164/967621

使用基准:Advantages of Set in ruby

对数组,集合和哈希进行速度比较