From: Todd Benson Date: 2008-02-22T03:41:01+09:00 Subject: Re: Simple array of strings sorting On Thu, Feb 21, 2008 at 12:20 PM, Ed wrote: > > On Feb 21, 1:06 pm, William James wrote: > > On Feb 21, 11:54 am, Ed wrote: > > > > > > > > > Say I have an array of strings that looks like this: > > > test-3 > > > test-31 > > > test-11 > > > test-12 > > > test-13 > > > test-32 > > > test-10 > > > test-14 > > > > > I want them sorted like so: > > > test-3 > > > test-10 > > > test-11 > > > test-12 > > > test-13 > > > test-14 > > > test-31 > > > test-32 > > > > > arr.sort doesn't seem to work the way I need. Any help? > > > Thanks > > > > The sequences of numerals need to be treated as numbers, > > not strings. > > > > " test-3 > > test-31 > > test-11 > > test-12 > > test-13 > > test-32 > > test-10 > > test-14 ".split.sort_by{|s| s[/\d+/].to_i} > > ==>["test-3", "test-10", "test-11", "test-12", "test-13", > > "test-14", "test-31", "test-32"] > > Thanks for the response. > arr.split.sort_by{ |s| s[/\d+/].to_i } produces this error message: > "can't convert Regexp into Integer" William was splitting the string as an example, not an array. Try... arr.sort_by { |s| s[/\d+/].to_i } ... if you trust your data (i.e. you don't accidentally have numbers hanging out elsewhere, like test1-41) Todd