Tho*_*rin 2 ruby arrays sorting ruby-on-rails
我需要获取目录和子目录中的所有文件,并且每个文件的日期都附加到文件名,如product_log_2016-11-17.txt
获取我使用的目录中存在的文件列表
all_logs = Dir["#{Rails.root}/log/product_logs/**/*.txt"]
Run Code Online (Sandbox Code Playgroud)
它返回这样的完整路径文件(我已从每个条目中删除了我的系统路径:
[
"/log/product_logs/new_2/product_log_2016-11-17.txt",
"/log/product_logs/new_2/products_log_2016-11-03.txt",
"/log/product_logs/new_1/products_log_2016-10-04.txt",
"/log/product_logs/new_1/product_log_2016-11-17.txt",
"/log/product_logs/new_1/products_log_2016-11-03.txt"
]
Run Code Online (Sandbox Code Playgroud)
但是我希望像这样按日期排序:
[
"/log/product_logs/new_2/product_log_2016-11-17.txt",
"/log/product_logs/new_1/product_log_2016-11-17.txt",
"/log/product_logs/new_2/products_log_2016-11-03.txt",
"/log/product_logs/new_1/products_log_2016-11-03.txt",
"/log/product_logs/new_1/products_log_2016-10-04.txt"
]
Run Code Online (Sandbox Code Playgroud)
我试过这样的:
all_logs.sort{|a, b|b.split("/").last.split("_").last.split(".").first <=>a.split("/").last.split("_").last.split(".").first }
Run Code Online (Sandbox Code Playgroud)
哪个有效,但似乎不是一个好的解决方案,任何人都可以让我知道什么是最好的方式来输入这种类型的列表?
? input.sort_by { |i| [i[/\d{4}-\d{1,2}-\d{1,2}/], i[/\d+/]] }
#? [
# [0] "/log/product_logs/new_1/products_log_2016-10-04.txt",
# [1] "/log/product_logs/new_1/products_log_2016-11-03.txt",
# [2] "/log/product_logs/new_2/products_log_2016-11-03.txt",
# [3] "/log/product_logs/new_1/product_log_2016-11-17.txt",
# [4] "/log/product_logs/new_2/product_log_2016-11-17.txt"
# ]
Run Code Online (Sandbox Code Playgroud)
与给出的答案相比有两个优点:
new_???,并且sort_by是更快的方式比sort.要接收降序排序,只需将呼叫链接到Enumerable#reverse最后.
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |