我有一个数组:
times = [2, 5, 7.5, 8.5, 9, 10, 11.5, 13.5, 14.5, 17, 18, 19, 24]
我希望用户输入时间,说“ 11”,然后返回“ 11.5”(times.index(6)
),因为它大于10
但小于11.5
。
有没有办法在Ruby中做到这一点?
如果obj在范围的开始和结束之间,则返回
===
,否则返回true
(与false
相同。]]cover?
如果您希望范围是排他的,则可以使用(1..5) === 0 # => false
(1..5) === 1 # => true
(1..5) === 5 # => true
(1..5) === 6 # => false
:
...
但是我不建议您使用
(1...5) === 0 # => false (1...5) === 1 # => true (1...5) === 5 # => false (1...5) === 6 # => false
。调试时很难发现,并且愚弄不了解调试方式的人会引入错误。
范围可以使用s..e
和s ... e文字或::: new构造。使用...
构造的范围从开始到结束都包括在内。使用..
创建的值不包括最终值。最好使用4(或先前的值)代替,这可以完成相同的操作:
...
返回您的问题:
(1..4) === 0 # => false
(1..4) === 1 # => true
(1..4) === 5 # => false
(1..4) === 6 # => false
如果您要查找大于给定数字的第一个数字(假设对数组进行了排序,则],
times = [2, 5, 7.5, 8.5, 9, 10, 11.5, 13.5, 14.5, 17, 18, 19, 24]
times.select { |i| (11 .. 11.5) === i } # => [11.5]
我的答案建议在times.sort.find { |time | time > given_time }
较大时有效的方法。