Порядок сортировки в `Dir.entries`
Есть ли фиксированный порядок сортировки по умолчанию, когда Dir.entries
возвращает результаты? По опыту я знаю, что первые две записи: "."
и ".."
.
Ответы
Ответ 1
В соответствии с документами Ruby, Dir.entries()
не гарантирует какого-либо определенного порядка перечисленных файлов, поэтому, если вам нужен какой-то заказ лучше всего сделать это явно.
Например, если вам нужно сортировать по времени изменения файла (от самого старого до самого нового), вы можете сделать следующее:
Dir.entries('.').sort_by { |x| File.mtime(x) }
Ответ 2
Я думаю, что порядок сортировки по умолчанию отсутствует, но вы можете использовать Dir.entries('some_path_to_dir').sort
для сортировки по ASC-пути.
Ответ 3
Развернув ответ на @maerics, ниже игнорируется . && ..
, фильтр на основе регулярных выражений и при необходимости выберите последний файл.
Dir.chdir(in_dir)
target_file = Dir.entries(in_dir).select(|x|
x != '.' &&
x != '..' &&
x =~ /\somefile.txt\z/).sort_by{|f|File.mtime(f)}.last(1)
puts "here i am #{target_file}"
Ответ 4
Для других, которые могут прийти сюда с такими же сомнениями. Способ выбора только файлов, которые соответствуют регулярному выражению, и по-прежнему иметь возможность сортировать их так, как вы хотите:
files_sorted_by_date = Dir["your regex"].sort_by { |x| File.birthtime(x) }.reverse
или
files_sorted_by_date = Dir["your regex"].sort_by { |x| File.birthtime(x) }
В зависимости от того, как ваши файлы сортируются.
Я не мог бы сделать то же самое с помощью метода Dir.entries