(a)下面是一些类似的线条
......, start Mon 10/30 10:08
......, start Thu 12/21 9:21
字符串
(b)我想做的是:按日期和时间排序行,但要删除从今天开始的行
(c)下面是实现此函数的Ruby代码
time = Time.new
$mon = time.month
$mday = time.day
# ......
array_tmp = results_all.lines.reject do |x|
times = x.split(/,/)[1].scan(/\d+/).map(&:to_i)
times[0] == $mon && times[1] == $mday
end
array_tmp.sort_by {|x| x.split(/,/)[1].scan(/\d+/).map(&:to_i)}]
型
我的问题是:
在Ruby中,是否有更好、更优雅的方法来同时进行过滤和排序?
1条答案
按热度按时间oxalkeyp1#
假设我们得到:
个字符
然后可以这样写:
x
的一种或多种
中间计算
型
显示正在排序的数组。每个元素都是一个两元素数组。第二个元素是正在排序的字符串之一;第一个元素是根据该字符串的月-日-时间表示计算的
DateTime
示例。排序主要在第一个元素上完成,第二个元素仅用于在两个DateTime
示例相等时打破平局。请参阅文档Array#sort。也可以这样写:
型
这可能会比第一种方法快一些(因为
sort_by
的块只执行一次计算,尽管string_to_datetime
被调用了两次)。另请参阅Date::today、Escort #filter_map、DateTime::strptime、String#[]和DateTime#to_date。有关
DateTime::strptime
使用的格式化指令,请参阅Time#strftime。