MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Sorting

  • To: mathgroup at
  • Subject: [mg22084] Re: [mg22067] Sorting
  • From: "David Park" <djmp at>
  • Date: Sun, 13 Feb 2000 01:14:02 -0500 (EST)
  • Sender: owner-wri-mathgroup at

>Hi folks,
>can anyone tell me how I can make Mathematica sort variable names
>without sorting any numbers within those variables as strings as
>well? If you try Sort[{z2,a5,z10}] you get back {a5,z10,z2}, while I
>want to get back {a5,z2,z10}.
>Wagner Truppel
>wtruppel at

Hi Wagner,

If I was going to do a lot of this, my first choice would be to use variable names
like z[2], a[5] and z[10]. Then

Sort[{z[2], a[5], z[10]}]
{a[5], z[2], z[10]}

You could also use subscripts.

However, if you absolutely must have the numbers mixed into the symbol, and if you
always have only one leading character,  then the following routine will work:

symsort[syms_List] :=
  Sort[syms /. s_Symbol /; s =!= List :>
      Module[{str}, str = ToString[s];
        ToExpression[StringTake[str, 1]][
         ToExpression[StringDrop[str, 1]]]]] /.
   (s_)[n_] :> StringJoin[ToString[s], ToString[n]]

symsort[{z2, a5, z10}]
{"a5", "z2", "z10"}

If you have the possibility of more than one leading character, then you must test to
find where to break the string.

David Park
djmp at

  • Prev by Date: Re: Sorting
  • Next by Date: Re: Non-standard evaluation
  • Previous by thread: Re: Sorting
  • Next by thread: Re: Sorting