范围不包括红宝石的边界

时间:2016-11-15 14:45:52

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个范围数组,如:

range_array = [4830..5520, 2000..2700, 600..1335, 3660..4170]

我检查范围如下:

range_array.map{|a| a.include?(3660)}.any? # Gives true as the boundary matches 3660.

我想检查不包括边界的范围。我试过了between?,但问题是一样的。

如何用更少的代码实现它?

4 个答案:

答案 0 :(得分:3)

您还可以使用firstlast

检查边界
range_array.map{|a| a.include?(3660) && a.first != 3660 && a.last != 3660}.any?

答案 1 :(得分:3)

结束值可以开箱即用:Range false设置为1...5(用三点表示,例如{{} 1}}。)

要排除开始和结束值,应明确检查值:

range_array = [3660...4170]
range_array.map do |range|
  (range.begin.succ...range.end) === 3660
end.any?

答案 2 :(得分:2)

怎么样?

range_array = [4830..5520, 2000..2700, 600..1335, 3660..4170]
range_array.any? do |range| 
   (range.begin.next...range.end).cover?(3660)
end
#=> false

答案 3 :(得分:0)

我有办法,例如:

range = (1..10)
range.reject.with_index{|a, i| [0, range.to_a.length - 1].include?(i)}

给出[2, 3, 4, 5, 6, 7, 8, 9]