For Programmers: Free Programming Magazines  


Home > Archive > Mathematica > April 2005 > Sort problem









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Sort problem
konstantpi@mail15.com

2005-04-21, 9:00 am

Hi
How to sort two lists such as:
age={30,12,60,20};
pple={"john","kate","peter","alice"};

to give the output:
age={12,20,30,60}
pple={"kate","alice","john","peter"}

ie: to keep every person opposite his age number.
thanks

Jens-Peer Kuska

2005-04-22, 9:00 am

Hi,

AgeSort[person : {__String}, age : {__Integer}] /;

Length[person] == Length[age] :=
Transpose[Sort[Transpose[{age, person}],
First[#1] < First[#2] &]]

{pple,age}=AgeSort[pple, age];

???

Regards

Jens

<konstantpi@mail15.com> schrieb im Newsbeitrag
news:d47suf$54n$1@smc.vnet.net...
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age
> number.
> thanks
>



Peter Pein

2005-04-22, 9:00 am

konstantpi@mail15.com wrote:
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>

age={30,12,60,20};
pple={"john","kate","peter","alice"};

{age,pple}=Transpose[Sort[Transpose[{age
,pple}]]];
age
pple

prints

{12, 20, 30, 60}
{"kate", "alice", "john", "peter"}

--
Peter Pein
Berlin

Bob Hanlon

2005-04-22, 9:00 am

age={30,12,60,20};
pple={"john","kate","peter","alice"};

{age,pple}=Transpose[Sort[Thread[{age,pp
le}]]]

{{12, 20, 30, 60}, {"kate", "alice", "john", "peter"}}

or

age={30,12,60,20};
pple={"john","kate","peter","alice"};

pple=pple[[Ordering[age]]]

{kate,alice,john,peter}

age=Sort[age]

{12,20,30,60}


Bob Hanlon

>
> From: konstantpi@mail15.com
> Date: 2005/04/21 Thu AM 05:36:11 EDT
> To: mathgroup@smc.vnet.net
> Subject: Sort problem
>
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>
>


Marcus Stollsteimer

2005-04-22, 9:00 am

konstantpi@mail15.com wrote:

> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}


Hi,

use Ordering[]

Regards,
Marcus

--
What is life but a series of inspired follies? -- George Bernard Shaw

dh

2005-04-22, 9:00 am

Hi,
The ordered indices you get from "Ordering"(see help) and an element
from its index from "Part":

Part[#, Ordering[age]] & /@ {age, pple}

Sincerely, Daniel

konstantpi@mail15.com wrote:
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>


Caffa Vittorio Dr.

2005-04-22, 9:00 am

Try this:

In[1]:= age = {30, 12, 60, 20};

In[2]:= pple = {"john", "kate", "peter", "alice"};

In[3]:= {age, pple} = Transpose[Sort[Transpose[{age, pple}]]];

In[4]:= age

Out[4]= {12, 20, 30, 60}

In[5]:= pple

Out[5]= {kate, alice, john, peter}

Cheers, Vittorio

>-----Original Message-----
>From: konstantpi@mail15.com [mailto:konstantpi@mail15.com]
>Sent: Thursday, April 21, 2005 11:36 AM
>Subject: Sort problem
>
>Hi
>How to sort two lists such as:
>age={30,12,60,20};
>pple={"john","kate","peter","alice"};
>
>to give the output:
>age={12,20,30,60}
>pple={"kate","alice","john","peter"}
>
>ie: to keep every person opposite his age number.
>thanks


Sepulveda, Ariel

2005-04-22, 9:00 am

A few ideas on Sort:

age = {30, 12, 60, 20};
names = {"john", "kate", "peter", "alice"};
{age, names} // Sort
{age, names} // Sort // Transpose
Sort[{age, names} // Transpose, #1[[1]] < #2[[1]] &]
Sort[{age, names} // Transpose, #1[[1]] > #2[[1]] &]
Sort[{age, names} // Transpose, #1[[2]] < #2[[2]] &]
Sort[{age, names} // Transpose, #1[[2]] > #2[[2]] &]
Sort[{age, names} // Transpose, #1[[1]] < #2[[1]] &] // Transpose
Sort[{age, names} // Transpose, #1[[1]] > #2[[1]] &] // Transpose
Sort[{age, names} // Transpose, #1[[2]] < #2[[2]] &] // Transpose
Sort[{age, names} // Transpose, #1[[2]] > #2[[2]] &] // Transpose

-----Original Message-----
From: konstantpi@mail15.com [mailto:konstantpi@mail15.com]
Subject: Sort problem

Hi
How to sort two lists such as:
age={30,12,60,20};
pple={"john","kate","peter","alice"};

to give the output:
age={12,20,30,60}
pple={"kate","alice","john","peter"}

ie: to keep every person opposite his age number.
thanks

Jon Harrop

2005-04-22, 9:00 am

konstantpi@mail15.com wrote:
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks


Combine the two lists into one list of pairs:

In[1]:= data = Transpose[{age, pple}]
Out[1]= {{30, john}, {12, kate}, {60, peter}, {20, alice}}

Then sort by comparing only the first part of each element:

In[1]:= Sort[data, First[#1] < First[#2] &]
Out[1]= {{12, kate}, {20, alice}, {30, john}, {60, peter}}

The extract the ages and people:

In[1]:= {age, pple} = {First /@ data, Last /@ data}
Out[1]= {{30, 12, 60, 20}, {john, kate, peter, alice}}

--
Dr Jon D Harrop, Flying Frog Consultancy
http://www.ffconsultancy.com

Wolf, Hartmut

2005-04-22, 9:00 am


>-----Original Message-----
>From: konstantpi@mail15.com [mailto:konstantpi@mail15.com]
>Sent: Thursday, April 21, 2005 11:36 AM
>Subject: Sort problem
>
>Hi
>How to sort two lists such as:
>age={30,12,60,20};
>pple={"john","kate","peter","alice"};
>
>to give the output:
>age={12,20,30,60}
>pple={"kate","alice","john","peter"}
>
>ie: to keep every person opposite his age number.
>thanks
>
>


In[7]:= {sage, spple} =
With[{ordage = Ordering[age]}, {age[[ordage]], pple[[ordage]]}]
Out[7]=
{{12, 20, 30, 60}, {"kate", "alice", "john", "peter"}}


--
Hartmut Wolf

János

2005-04-22, 9:00 am


On Apr 21, 2005, at 5:36 AM, konstantpi@mail15.com wrote:

> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks


In[7]:=
Transpose[Sort[Thread[
{age, pple}]]]
Out[7]=
{{12, 20, 30, 60},
{"kate", "alice", "john",
"peter"}}

János


----------------------------------------------
Trying to argue with a politician is like lifting up the head of a
corpse.
(S. Lem: His Master Voice)

Carl K. Woll

2005-04-22, 9:00 am

<konstantpi@mail15.com> wrote in message news:d47suf$54n$1@smc.vnet.net...
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>


Use Ordering.

ord=Ordering[age];
age=age[[ord]]
pple=pple[[ord]]

will do what you want.

Carl Woll


Andrzej Kozlowski

2005-04-22, 9:00 am


On 21 Apr 2005, at 18:36, konstantpi@mail15.com wrote:

> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>


Transpose[Sort[Transpose[{age, pple}]]]


{{12, 20, 30, 60}, {"kate", "alice", "john", "peter"}}



Andrzej Kozlowski
Chiba, Japan
http://www.akikoz.net/andrzej/index.html
http://www.mimuw.edu.pl/~akoz/

Tomas Garza

2005-04-22, 9:00 am

Is this what you want?

In[3]:=
{age,pple}=Transpose[Sort[Transpose[{age
,pple}]]]
Out[3]=
{{12,20,30,60},{kate,alice,john,peter}}

In[4]:=
age
Out[4]=
{12,20,30,60}

In[5]:=
pple
Out[5]=
{kate,alice,john,peter}

Tomas Garza
Mexico City
----- Original Message -----
From: <konstantpi@mail15.com>
Subject: Sort problem


> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>
>


DrBob

2005-04-22, 9:00 am

age={30,12,60,20};
pple={"john","kate","peter","alice"};
{age,pple}=Transpose@Sort@Transpose@{age
,pple}

{{12,20,30,60},{kate,alice,john,peter}}

Bobby

On Thu, 21 Apr 2005 05:36:11 -0400 (EDT), <konstantpi@mail15.com> wrote:

> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>
>
>
>




--
DrBob@bigfoot.com

Harald Giese

2005-04-22, 9:00 am

konstantpi@mail15.com wrote:
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>


Hi Konstantin,

try "Ordering":

ord=Ordering[age]
{2,4,1,3}

age[[ord]]
(* same as: Sort[age] *)
{12,20,30,60}

(* but can be used to re-order "pple" *)
pple[[ord]]
{kate,alice,john,peter}


HTH
Harald
from Hamburg@Germany

Bill Rowe

2005-04-22, 9:00 am

On 4/21/05 at 5:36 AM, konstantpi@mail15.com wrote:

>Hi How to sort two lists such as: age={30,12,60,20};
>pple={"john","kate","peter","alice"};


>to give the output: age={12,20,30,60}
>pple={"kate","alice","john","peter"}


>ie: to keep every person opposite his age number. thanks


use Sort and Ordering as follows:

In[1]:=
age = {30, 12, 60, 20};
pple = {"john", "kate", "peter", "alice"};

In[3]:=
Sort[age]
pple[[Ordering[age]]]

Out[3]={12, 20, 30, 60}
Out[4]={"kate", "alice", "john", "peter"}
--
To reply via email subtract one hundred and four

Detlef Müller

2005-04-22, 9:01 am

konstantpi@mail15.com wrote:
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>

A case for "Transpose":

Transpose[Sort[Transpose[{age,pple}]]]
In[1]:=
age={30,12,60,20};
pple={"john","kate","peter","alice"};

In[7]:=
Transpose[{age,pple}]
Out[7]=
{{30,john},{12,kate},{60,peter},{20,alic
e}}

Transpose[Sort[Transpose[{age,pple}]]]
Out[6]=
{{12,20,30,60},{kate,alice,john,peter}}

In[13]:=
Transpose[Sort[Transpose[{age,pple}]]][[
2]]
Out[13]=
{kate,alice,john,peter}

> ie: to keep every person opposite his age number.
> thanks
>


Greetings,
Detlef

Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com