У меня есть несколько сотен изображений в ведро S3, которое я пишу в массив и хочу, чтобы они сортировались и отображались в алфавитном порядке. Изображения начинаются с той же схемесортировать рубиновый массив по номерам
#1 <some name>.jpg
#2 <some name>.jpg
...
#10 <some name>.jpg
#11 <some name>.jpg
...
после использования
@images.each do |image|
@image[i] = image.url_for(:read).to_s
i = i + 1
end
@image.sort
однако, массив @image сортируется таким образом:
<s3 bucket URL>/#1 <some name>.jpg
<s3 bucket URL>/#10 <some name>.jpg
<s3 bucket URL>/#11 <some name>.jpg
...
<s3 bucket URL>/#2 <some name>.jpg
<s3 bucket URL>/#20 <some name>.jpg
<s3 bucket URL>/#21 <some name>.jpg
...
Это мое понимание того, что " алфавит ", и поэтому сортировка должна сортировать # 1, # 2, # 3 и т. д., но это, похоже, не так. Очевидно, что я хочу это сортируется таким образом:
<s3 bucket URL>/#1 <some name>.jpg
<s3 bucket URL>/#2 <some name>.jpg
<s3 bucket URL>/#3 <some name>.jpg
...
<s3 bucket URL>/#10 <some name>.jpg
<s3 bucket URL>/#11 <some name>.jpg
<s3 bucket URL>/#12 <some name>.jpg
...
Как я могу достичь этого с помощью алгоритма сортировки в этом случае? Спасибо за любую помощь.
Не работает, к сожалению, массив по-прежнему сортируется # 1, # 10, # 11 .... # 2, # 21, ... вот мой код: \t 'images = s3.buckets ['mybucket «].объекты \t \t я = 0 \t fnames = Array.new \t \t images.each сделать | имя_файла | \t fnames [я] = fname.url_for (: чтение) .to_s \t я = я + 1 конец @results = fnames.sort_by сделать | имя_файла | [ имя_файла [/ # (\ d +) /, 1] .to_i, $»#The остаток строки после матча ] end' – DonMB
@MartinBraun, Вы писали имена файлов, которые вы хотите отсортировать. Мой код сортирует эти имена файлов. Он работает так, как вы просили, - посмотрите результаты. Код, который вы используете для создания этих имен файлов, не имеет значения. – 7stud
Я беру это отсюда, спасибо за вашу помощь! – DonMB