PIYO - Tech & Life -

Rubyで数字の桁数が揃っていない文字列を数字順にソートする

Ruby

数字部分の桁数が揃っていないこういうファイル群があるとします。

  • image1.jpg
  • image2.jpg
  • image10.jpg
  • image11.jpg

多くの言語ではこれらを文字列として持っているArrayをソートすると普通は辞書順になるので次のような順になってしまいます。Rubyもそうです。

  • image1.jpg
  • image10.jpg
  • image11.jpg
  • image2.jpg
  • image20.jpg

番号の若い順に処理したい場合はこれだと困るのでちょっと細工をします。

# このままだと辞書順
images = Dir.glob("image*.jpg")

# これで数字の昇順になる
image = images.sort_by{|file| file[/\d+/].to_i}