问题描述
我想这样写条件,但是太长了。 如何使它更简单?
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
对数组,集合和哈希进行速度比较