Re: Sorting
- To: mathgroup at smc.vnet.net
- Subject: [mg22088] Re: [mg22067] Sorting
- From: Andrzej Kozlowski <andrzej at platon.c.u-tokyo.ac.jp>
- Date: Sun, 13 Feb 2000 01:14:05 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
on 00.2.12 11:53 PM, Andrzej Kozlowski at andrzej at platon.c.u-tokyo.ac.jp
wrote:
> on 00.2.12 6:04 PM, Wagner Truppel at wtruppel at uci.edu wrote:
>
>> 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
>>
> The following is probably not nor most efficient way to do this but it seems
> to work:
>
> mysort[l_List] :=
> Block[{a, x},
> Map[ToExpression,
> Map[StringJoin,
> Map[ToString,
> Sort[Map[ToExpression,
> Map[Characters[ToString[#]] &, l], {-1}] /. {a_Symbol,
> x__?NumberQ} -> {a, {x}}], {-1}]]]]
>
> In[6]:=
> mysort[{a3, z5, z17, a9, b19, b7}]
>
> Out[6]=
> {a3, a9, b7, b19, z5, z17}
>
> while
>
> In[8]:=
> Sort[{a3, z5, z17, a9, b19, b7}]
>
> Out[8]=
> {a3, a9, b19, b7, z17, z5}
>
>
> --
Here is another method, which looks (perhaps) a little more elegant:
In[2]:=
Sort[{z2, a5, z10},
OrderedQ[{{DeleteCases[ToExpression[Characters[ToString[#1]]], _Integer],
DeleteCases[
ToExpression[Characters[ToString[#1]]], _Symbol]}, {DeleteCases[
ToExpression[Characters[ToString[#2]]], _Integer],
DeleteCases[ToExpression[Characters[ToString[#2]]], _Symbol]}}] &]
Out[2]=
{a5, z2, z10}
Andrzej Kozlowski
Toyama International University
Toyama, Japan
http://sigma.tuins.ac.jp/