From: Ryan Davis Date: 2012-03-28T02:23:22+09:00 Subject: Re: sort array of strings with integers On Mar 27, 2012, at 09:45 , Ryan Davis wrote: > > On Mar 27, 2012, at 00:59 , Ri Houjun wrote: > >> i have this array >> >> b=[a1 a3 a2 a4 a7 a6 a5 a8 a9 a10] >> >> why is it when I perform b.sort! >> the result is: >> b=[a1 a10 a2 a3 a4 a5 a6 a7 a8 a9] >> >> how can i make it >> b=[a1 a2 a3 a4 a5 a6 a7 a8 a9 a10] > > p Dir["f*.txt"].sort > # => ["f0.txt", "f1.txt", "f10.txt", "f11.txt", ..., "f2.txt", "f3.txt", ...] > > class Array > def human_sort > sort_by { |item| item.to_s.split(/(\d+)/).map { |e| [e.to_i, e] } } > end > end > > p Dir["f*.txt"].human_sort > # => ["f0.txt", "f1.txt", "f2.txt", "f3.txt", "f4.txt", "f5.txt", "f6.txt", ...] from: http://blog.zenspider.com/blog/2012/01/array-natural_sort.html