在Ruby中是否有一个“大于但小于”的函数

问题描述 投票:-2回答:3

我有一个数组:

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中做到这一点?

arrays ruby sorting search
3个回答
2
投票

使用Range===

如果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

0
投票

如果您要查找大于给定数字的第一个数字(假设对数组进行了排序,则],

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]

0
投票

我的答案建议在times.sort.find { |time | time > given_time } 较大时有效的方法。

© www.soinside.com 2019 - 2024. All rights reserved.