8

I have a list of string, which is most likely, but not guaranteed to contain a list of numerics, i.e.,

{"1", "6", "2", "21", "89"}

What is the way to sort the string list so that it will always appear in ascending order?

I can't parse the string to numeric first before doing the sorting simply because the string can contain non numeric characters. And I don't want to go through the list and check-cast each component to numerics and do the sorting. Is there already a library existing out there for this purpose?

In the case where we have mix numerics and non-numeric string item, numeric strings always take precedence over the non numeric ones.

Graviton
  • 79,554
  • 141
  • 413
  • 589

3 Answers3

8

This has been asked before slightly differently, but the same answer still applies, as they have a C# implementation on the same site.

SO Question: Sort on a string that may contain a number

Answer provided by ScArcher2: The Alphanum Algorithm

Community
  • 1
  • 1
Nick Craver
  • 610,884
  • 134
  • 1,288
  • 1,151
1

You want to sort elements, just like Windows XP Explorer does with files. See this article on how to do this.

Steven
  • 159,023
  • 23
  • 313
  • 420
0

If this is C#, that's what Int32.TryParse() is for.

If this is C++, then std::string::find_first_not_of is a decent bet. Pass it a string containing the ascii chars for the digits 0 to 9 (plus the minus and plus signs?) and if it returns -1 then it is an integer.

David Gladfelter
  • 4,117
  • 2
  • 24
  • 25
  • 2
    Nope, he want to be able to sort lists like this one: { a1, a10, a11, a2, a3 } in a natural way: { a1, a2, a3, a10, a11 }. TryParse will obviously not work. – Steven Feb 07 '10 at 14:27