检查值是否小于数组的任何值

时间:2016-02-10 10:14:14

标签: ruby

我有一个时间戳'2016-02-08 16:23:53'和一个包含不同时间戳['2016-02-09 14:23:53', '2015-02-08 16:23:53', '2016-02-08 16:22:53']的数组。

检查值是否小于数组中的任何值并返回truefalse的最简单方法是什么?

2 个答案:

答案 0 :(得分:6)

如果时间戳是字符串:

['2016-02-09 14:23:53', '2015-02-08 16:23:53', '2016-02-08 16:22:53'].none? do |ts| 
  Time.parse(ts) > Time.parse('2016-02-08 16:23:53')
end

如果时间戳已经是Time的实例,则无需parse

timestamps_array.none? do |ts|
  ts > Time.parse('2016-02-08 16:23:53')
end

好吧,为了@ sawa的耐心:)

在循环中解析每次比较的值是低效的:

timestamp_to_check = Time.parse('2016-02-08 16:23:53')
['2016-02-09 14:23:53', '2015-02-08 16:23:53', '2016-02-08 16:22:53'].none? do |ts| 
  Time.parse(ts) > timestamp_to_check
end

答案 1 :(得分:5)

检查值是否小于数组中的任何值可以在Ruby中用

完成
value < array_of_values.min

解决OP给出的示例的最简单方法是

'2016-02-08 16:23:53' < ['2016-02-09 14:23:53', 
                         '2015-02-08 16:23:53', 
                         '2016-02-08 16:22:53'].min

比较日期和时间的字符串表示只有在涉及的所有字符串使用相同的格式时才会有效,数字按从大到小的顺序排列(年数下降到秒),数字使用前导零。

使用适当的数据类型(如 Time DateTime )而不是字符串来存储和处理日期和时间将提高软件的稳健性。