我有一个如下所示的数组:
[Wed Jan 04 21:56:08 UTC 2012, Thu Jan 12 21:58:36 UTC 2012, Thu Jan 12 22:13:24 UTC 2012, Thu Jan 12 22:13:34 UTC 2012]
Ruby中最好的方法是只计算该数组中的不同日期? 2012年1月12日出现了三次,但它应该只计算一次,因为我只关心月/日/年,而不是数值显示在数组中的实际时间。
因此,过滤后此数组的总计数应为2个不同的月/日/年值的计数。
答案 0 :(得分:3)
是那些字符串还是DateTime对象?假设后者,并假设该数组被称为datetime_arr
...
date_arr = datetime_arr.map &:to_date
# => [Wed, 04 Jan 2012, Thu, 12 Jan 2012, Thu, 12 Jan 2012, Thu, 12 Jan 2012]
date_arr.uniq!
# => [Wed, 04 Jan 2012, Thu, 12 Jan 2012]
date_arr.length
# => 2
我希望有所帮助。
答案 1 :(得分:0)
虽然您已经接受了答案,但我想要注意的是,如果您正在迭代项目列表并且想要为每个特定分组执行一次操作(例如输出标题),则应使用Enumerable#group_by
为方便起见:
require 'date'
all_times = 5.times.map{ |i| Time.now + 3600 * 3 * i }
all_times.sort.group_by(&:to_date).each do |day, day_times|
puts "",day,"-"*40
day_times.each do |time|
puts time.strftime(" * %I:%M%P")
end
end
#=> 2012-01-12
#=> ----------------------------------------
#=> * 08:56pm
#=> * 11:56pm
#=>
#=> 2012-01-13
#=> ----------------------------------------
#=> * 02:56am
#=> * 05:56am
#=> * 08:56am