我有一个时间戳'2016-02-08 16:23:53'
和一个包含不同时间戳['2016-02-09 14:23:53', '2015-02-08 16:23:53', '2016-02-08 16:22:53']
的数组。检查一个值是否小于数组的任何值
什么是最简单的方法来检查值是否小于数组中的任何值,并返回true
或false
?
我有一个时间戳'2016-02-08 16:23:53'
和一个包含不同时间戳['2016-02-09 14:23:53', '2015-02-08 16:23:53', '2016-02-08 16:22:53']
的数组。检查一个值是否小于数组的任何值
什么是最简单的方法来检查值是否小于数组中的任何值,并返回true
或false
?
检查如果一个值小于可以在红宝石
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
比较日期和时间的字符串表示只有在涉及的所有字符串使用相同的格式时才有效,数字从大到小排序(年至数秒),数字使用前导零。
用于存储和处理日期和时间将提高软件的健壮性,使用适当的数据类型(如时间或日期时间),而不是字符串。
如果时间戳字符串:
['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
嗯,@泽的耐心:)
着想解析循环中每次比较的值效率不高:
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
智能解决方案。 – sawa
对于不太聪明的人,他们不明白这个答案的价值,这些提示是:y-m-d-h-m -s顺序,零填充,固定长度以及ASCII中0-9的顺序。 – sawa
@sawa这将在C世纪(10000年:) :)失败 – mudasobwa