Order numbers by value


#1

I have this drop-down that get populated with “stuff.” As I have
recently found out, this “stuff” will either be all string values or all
numerical values. I have the string values being ordered correctly but
the numerical values are not. For example, this sequence of numbers
7007, 7100, 70100, 7009, 70200 get order as 7007, 7009, 70100, 70200,
7100. Is there a way to treat these strings as numbers instead of
strings and order them as such?


#2

You could convert them to integer, sort and convert back to string.
There may well be a neater way as this is ruby, I don’t know.

2009/5/13 Shandy N. removed_email_address@domain.invalid


#3

On May 13, 11:03 am, Shandy N. removed_email_address@domain.invalid
wrote:

I have this drop-down that get populated with “stuff.” As I have
recently found out, this “stuff” will either be all string values or all
numerical values. I have the string values being ordered correctly but
the numerical values are not. For example, this sequence of numbers
7007, 7100, 70100, 7009, 70200 get order as 7007, 7009, 70100, 70200,
7100. Is there a way to treat these strings as numbers instead of
strings and order them as such?

Use a custom sort routine:

[‘10’, ‘9’, ‘8’].sort #=> [‘10’, ‘8’, ‘9’]
[‘10’, ‘9’, ‘8’].sort_by{|x| x.to_i} #=> [‘8’, ‘9’, ‘10’]
[‘10’, ‘9’, ‘8’].sort{|a, b| a.to_i <=> b.to_i} #=> [‘8’, ‘9’, ‘10’]

Does that help?

Best,

Marnen Laibow-Koser
removed_email_address@domain.invalid
http://www.marnen.org