【发布时间】:2021-01-01 11:09:59
【问题描述】:
我的 ruby 脚本有问题。我有一个数组
files = ["2020-09-14.access","2020-09-13.access","2020-09-11.access","2020-09-10.access","2020-09-09.access","2020-09-08.access","2020-09-07.access","2020-09-05.access","2020-09-04.access","2020-09-02.access","2020-09-01.access","2020-09-14.sale","2020-09-12.sale","2020-09-08.sale","2020-09-07.sale","2020-09-06.sale","2020-09-04.sale",]
包含作为文件名的值。有两种类型的文件:访问和销售。每个文件名都包含文件创建日期。从每种文件类型中,我只想获取这些值,这些值具有两天前创建的较早日期开始的表单文件。对于文件类型销售没有问题,今天是2020-09-14,前两天创建的文件是2020-09-12.sale。但是如果访问文件没有创建文件2020-09-12,所以我想要日期最接近2020-09-12的文件,这意味着值2020-09-10.access,我在这里堆叠。总之我想得到这样的数组
to_del_files = [["2020-09-10.access","2020-09-09.access","2020-09-08.access","2020-09-07.access","2020-09-05.access","2020-09-04.access","2020-09-02.access","2020-09-01.access"],["2020-09-12.sale","2020-09-08.sale","2020-09-07.sale","2020-09-06.sale","2020-09-04.sale"]]
我的代码如下:
require 'date'
files = ["2020-09-14.access","2020-09-13.access","2020-09-10.access","2020-09-09.access","2020-09-08.access","2020-09-07.access","2020-09-05.access","2020-09-04.access","2020-09-02.access","2020-09-01.access","2020-09-14.sale","2020-09-12.sale","2020-09-08.sale","2020-09-07.sale","2020-09-06.sale","2020-09-04.sale",]
names = files.map {|x| x.split('.')[1] }.uniq
puts names
date = Date.today
date2ago = date -2
to_del_files = []
names.each do |item|
tmp = files.select { |x| x =~ /#{item}/ }
flag = tmp.select {|x| x =~ /#{date2ago}/ }
if flag.size > 0
index = tmp.find_index("#{flag[0]}")
to_del_files << tmp[index..-1]
else
#what to do in case where there is no such date in files
end
end
puts to_del_files
感谢您的帮助。
【问题讨论】:
-
如果没有 Rails 标签,则假设您想要一个纯 Ruby 解决方案。