Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sorting a List of Strings numerically (1,2,...,9,10 instead of 1,10,2)

I have a List like this:

var l = new List<string> {"bla 1.txt","bla 2.txt","bla 10.txt","bla 3.txt"};

If i call l.Sort(), the list gets sorted in the order 1,10,2,3 which makes sense from a pure string point of view, but sucks from a User Perspective.

Since I don't want to/can't force my users to name them 01, 02, 03,... I wonder if there is either a built-in method or simple algorithm to detect and sort numbers properly, so that I have 1,2,3,10? Since the numbers are only 1 or 2 characters long (i.e., no more than 99) I could possibly do a regex that temporarily prefixes all 1-digit numbers with a 0 and sort, but before I reinvent the wheel I wonder if something already exists?

.net 3.5SP1 if that matters, not 4.0

like image 653
Michael Stum Avatar asked Jan 24 '11 23:01

Michael Stum


People also ask

Can you sort a list of strings?

sort() list provides a member function sort(). It Sorts the elements of list in low to high order i.e. if list is of numbers then by default they will be sorted in increasing order. Whereas, if list is of strings then, it will sort them in alphabetical order.

How do you sort a list by numerical value in Python?

Python sorted() Function The sorted() function returns a sorted list of the specified iterable object. You can specify ascending or descending order. Strings are sorted alphabetically, and numbers are sorted numerically. Note: You cannot sort a list that contains BOTH string values AND numeric values.


1 Answers

The best approach is making use of IComparer. This has already been done and can be found on code project.

like image 172
Aaron McIver Avatar answered Oct 15 '22 19:10

Aaron McIver