Сортировка списка путей к файлам по дате изменения в Ruby

#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. Спасибо! это помогло мне!