2016-02-10 66 views
2

我有一个时间戳'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

回答

5

检查如果一个值小于可以在红宝石

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 

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

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

+1

智能解决方案。 – sawa

+2

对于不太聪明的人,他们不明白这个答案的价值,这些提示是:y-m-d-h-m -s顺序,零填充,固定长度以及ASCII中0-9的顺序。 – sawa

+0

@sawa这将在C世纪(10000年:) :)失败 – mudasobwa

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 

嗯,@泽的耐心:)

着想

解析循环中每次比较的值效率不高:

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 
+0

每次在循环中解析'2016-02-08 16:23:53''都是低效的。并且要严格,这并不能说明是否更少;它告诉它是否不大。你应该自然地使用'all?'。我没有看到你否定它的理由。 – sawa

+0

@sawa我知道,但罚款是微不足道的。 – mudasobwa

+0

最后回答:value Arif

相关问题