Ruby on rails 从日期集合中选择每个月的最后日期

Ruby on rails 从日期集合中选择每个月的最后日期,ruby-on-rails,ruby,Ruby On Rails,Ruby,在RubyonRails中,我收集了一些数据,需要对这些数据进行过滤,以获得每月最新创建的数据。做这件事的最佳优化方法是什么 e、 g 结果应该是 ["2012-1-18, "2012-2-23", ..] 这应该起作用: my_date = ["2012-1-2","2012-1-18", "2012-1-5", "2012-2-15","2012-2-23","2012-2-4"] my_date.sort_by{|date| month,day,year=date.split("-");

在RubyonRails中,我收集了一些数据,需要对这些数据进行过滤,以获得每月最新创建的数据。做这件事的最佳优化方法是什么

e、 g

结果应该是

["2012-1-18, "2012-2-23", ..]
这应该起作用:

my_date = ["2012-1-2","2012-1-18", "2012-1-5", "2012-2-15","2012-2-23","2012-2-4"]
my_date.sort_by{|date| month,day,year=date.split("-");[year,month,day]}
<>但是如果这些日期是从数据库表中出来的,也许你可以考虑在那里排序。这会快一点(特别是如果有很多记录的话)

返回对象的日期

再次转换为字符串:)


您的版本在哪里?输入中的嵌套数组和结果中的平面数组之间的关系是什么?不清楚。谢谢你提到这一点。让我们假设它不是一个嵌套数组,而是一个带日期的数组。你说你在使用Rails,所以我不得不问,你是从数据库中获取这些数据的吗?是的,数据是从数据库中获取的。在应用程序级别执行此操作时,我们发现其速度太慢。现在尝试移动数据库级复杂查询来执行上述操作为什么要执行
Date.new(*Date\u string.split(“-”).map{d\d.to\u i})
当您只需执行
Date.parse(Date\u string)
?Date.parse如何?只要你知道它是做什么的,它是如何做的,它就不可能是魔法。如果你不知道,那就学习而不是直接放逐它。这将把不同年份的同一个月作为一个小组来分组。不清楚OP是否有意这样做,但我想不是。好吧,随它去吧。我不介意。)你是parse的粉丝吗?我可以是.strtime或任何其他的粉丝。如果它做了它必须做的事情,它真正改变了什么?sawa,如果他一直在寻找这个月的最后一个月呢?)
my_date = ["2012-1-2","2012-1-18", "2012-1-5", "2012-2-15","2012-2-23","2012-2-4"]
my_date.sort_by{|date| month,day,year=date.split("-");[year,month,day]}
def last_in_month(dates)
  dates = dates.map {|date_string| Date.parse(date_string)}
  grouped_by_month = dates.group_by {|date| date.month}
  grouped_by_month.map do |month, dates_in_month|
    dates_in_month.max_by {|d| d.day}
  end
end

last_in_month(your_nested_arrays.flatten)
last_in_month(your_nested_arrays.flatten).map {|d| d.to_s(:db)}
["2012-1-2","2012-1-18", "2012-1-5", "2012-2-15","2012-2-23","2012-2-4"]
.group_by{|s| s[/\d+-\d+/]}
.values
.map{|a| a.max_by{|s| s[/\d+\z/].to_i}}
["2012-1-2","2012-1-18", "2012-1-5", "2012-2-15","2012-2-23","2012-2-4"].map { |d| Date.parse(p) }.sort.group_by { |d| [d.month, d.year].join('/') }.map { |k,v| v.last.strftime("%Y-%-m-%-d") }