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
  • 81,782
  • 146
  • 424
  • 602

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
  • 623,446
  • 136
  • 1,297
  • 1,155
1

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

Steven
  • 166,672
  • 24
  • 332
  • 435
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,175
  • 2
  • 25
  • 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