我有一个范围数组,如:
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?
,但问题是一样的。
如何用更少的代码实现它?
答案 0 :(得分:3)
您还可以使用first
和last
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]