#ruby #io
#ruby #io
Вопрос:
Я пытаюсь отсортировать список файлов по дате. В настоящее время у меня есть строковый массив путей к файлам, и мне нужно отсортировать их по дате изменения. Я пытался выполнить следующее, но безуспешно. Я тоже не совсем понимаю, как работает метод sort_by.
@files.sort_by {|filename| File.mtime(filename) }
Редактировать
Я также пытался преобразовать их в даты и отсортировать их.
@files.sort_by {|filename| DateTime.parse(File.mtime(filename).to_s) }
Спасибо!
Ответ №1:
Строка, которая у вас есть, работает так, как вы и ожидали. Я создал четыре файла, и это результат по ls -lt
, который сортирует файл по времени изменения:
$ ls -t
2 3 4 1
Ваш пример выводит:
@files = Dir.entries(Dir.pwd)
@files.sort_by { |file| File.mtime(file) }
=> ["2", ".", "3", "4", "1", ".."]
Примечание: По соглашению метод в любом наборе не изменяет сам набор. Вам нужно вызвать sort_by!
, чтобы применить отсортированный набор к исходному набору.
Ответ №2:
Ваш первый пример должен работать правильно, но он просто возвращает отсортированный массив файлов. Если вы хотите изменить свою переменную, попробуйте mutator sort_by!
@files.sort_by! {|filename| File.mtime(filename) }
Комментарии:
1. Спасибо! это помогло мне!