Re: Keeping order with Union

• To: mathgroup at smc.vnet.net
• Subject: [mg32612] Re: [mg32590] Keeping order with Union
• From: Tomas Garza <tgarza01 at prodigy.net.mx>
• Date: Thu, 31 Jan 2002 01:45:44 -0500 (EST)
• References: <200201300819.DAA29991@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```I guess this problem has been posed before in this forum, and many answers
must have been put forward. Anyway, being too lazy to search in the
archives, I propose the following. Let lst be your list, from which you wish
to eliminate duplicates, preserving the order. Define the function elimReps:

In[1]:=
elimReps[u_, v_] := If[MemberQ[u, v], u, Append[u, v]]

Then use Fold on your list as follows:

In[2]:=
Fold[elimReps, {First[lst]}, Rest[lst]]

Examples:

In[3]:=
list1={a, b, c, e, e, g, a, 1, 5, 1, b};

In[4]:=
Fold[elimReps, {First[list1]}, Rest[list1]]
Out[4]=
{a, b, c, e, g, 1, 5}

In[5]:=
list2 = Table[Random[Integer, {0, 9}], {10}]
Out[5]=
{0, 9, 8, 3, 0, 7, 3, 6, 4, 2}

In[6]:=
Fold[elimReps, {First[list2]}, Rest[list2]]
Out[6]=
{0, 9, 8, 3, 7, 6, 4, 2}

Tomas Garza
Mexico City

----- Original Message -----
To: mathgroup at smc.vnet.net
Subject: [mg32612] [mg32590] Keeping order with Union

> I'd like a function that throws out duplicate entries in a list and keeps
> the
> original list order.  (when it sees 2 equal entries it throws out the one
> that is later in the list).   I'd use Union, but it sometimes changes the
> order of the elements in the list.  What's the tersest way to do this?