具有范围值的数组?

时间:2014-07-18 15:39:26

标签: ruby arrays range

a = [1, 2, 3..9, 10, 15, 20..43]
print a.include?(5) # Returns false

我希望它返回true,但3..9未转换为[3,4,5,6,7,8,9]

我错过了一些愚蠢的东西,但我无法弄清楚。基本上我想用常规fixnums和范围初始化它。

3 个答案:

答案 0 :(得分:7)

你必须把它甩掉

a = [1, 2, *3..9, 10, 15, 20..43]
a.include?(5) # => true

答案 1 :(得分:3)

如果你想要一个" lazier"不需要您将范围转换为数组元素的方法,请尝试使用===(大小写相等)运算符。

a = [1, 2, 3..9, 10, 15, 20..43]
a.any? { |x| x === 5 }

我建议使用这种方法,因为它比将范围分割成单独的元素要有效得多。

答案 2 :(得分:1)

另一种解决方案,没有splat。

a = [1, 2, 3..9, 10, 15, 20..43]

a.any? {|i| i.kind_of?(Range) ? i.include?(5) : i == 5 }
# => true