Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2000
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2000

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

Search the Archive

Re: Sorting

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

>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}.
>
>Thanks.
>Wagner Truppel
>wtruppel at uci.edu
>


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 earthlink.net
http://home.earthlink.net/~djmp/



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