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

Ari*_*rif 2 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?的最简单方法是什么?

Ale*_*kin 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
Run Code Online (Sandbox Code Playgroud)

如果时间戳已经是实例Time,则不需要parse:

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

好吧,为了@ 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
Run Code Online (Sandbox Code Playgroud)


bog*_*ogl 5

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

value < array_of_values.min
Run Code Online (Sandbox Code Playgroud)

解决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
Run Code Online (Sandbox Code Playgroud)

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

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

  • 对于那些不了解这个答案值的不那么聪明的人,提示是:ymdhms顺序,零填充,固定长度,以及ASCII中0-9的排序. (2认同)