I have this array:
arr = ["/Users/user/Documents/public/170/41/texts/10.txt",
"/Users/user/Documents/public/170/41/texts/11.txt",
"/Users/user/Documents/public/170/41/texts/12.txt",
"/Users/user/Documents/public/170/41/texts/14.txt",
"/Users/user/Documents/public/170/41/texts/15.txt",
"/Users/user/Documents/public/170/41/texts/18.txt",
"/Users/user/Documents/public/170/41/texts/6.txt",
"/Users/user/Documents/public/170/41/texts/8.txt"]
I want to sort it by integer values of .txt files. I am doing this:
arr.sort_by{|h| h.scan(/(\d+)\.txt/).flatten[0].to_i}
I wonder - is there a better way to do it?
Use basename
instead of parsing the paths yourself:
arr.sort_by { |path| File.basename(path, '.txt').to_i }