Re: Elegant syntax for multiple conditional assignment?

• To: mathgroup at smc.vnet.net
• Subject: [mg54632] Re: Elegant syntax for multiple conditional assignment?
• From: Paul Abbott <paul at physics.uwa.edu.au>
• Date: Thu, 24 Feb 2005 03:21:38 -0500 (EST)
• Organization: The University of Western Australia
• References: <cv6q9a\$65c\$1@smc.vnet.net> <cv99b2\$kkl\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```In article <cv99b2\$kkl\$1 at smc.vnet.net>,
Scott Hemphill <hemphill at hemphills.net> wrote:

> > I've got a method that works:
> >
> > t=Transpose;
> > {a, c, x, y} = t[If[#[[1]],#[[2]],#[[3]]]& /@ t[{cond,t[new],t[old]}]];
> >
> > All the transpositions and array indexing make me wonder if there's a more
> > elegant way of expressing this.
> >
> > Any takers?  Thanks in advance.
>
> Maybe I should have given a more concrete example:
>
>   old = {Array[olda,{5}], Array[oldc,{5}], Array[oldx,{5}], Array[oldy,{5}]};
>   new = {Array[newa,{5}], Array[newc,{5}], Array[newx,{5}], Array[newy,{5}]};
>   cond = {True,False,True,False,True};
>
>   I want to assign:
>
>     a = {newa[1], olda[2], newa[3], olda[4], newa[5]}
>
>   based on the conditions in cond, and similarly for c, x, and y.

Here are two possibilities that avoid array indexing:

{a, c, x, y} = Apply[If,Transpose[{cond,Last[#],First[#]}],1]& /@
Transpose[{old, new}]

{a, c, x, y} = Tr[#, List] & /@ Transpose[Thread[If[cond, new, old]]]

Cheers,
Paul

--
Paul Abbott                                   Phone: +61 8 6488 2734
School of Physics, M013                         Fax: +61 8 6488 1014
The University of Western Australia      (CRICOS Provider No 00126G)
35 Stirling Highway
Crawley WA 6009                      mailto:paul at physics.uwa.edu.au
AUSTRALIA                            http://physics.uwa.edu.au/~paul

```

• Prev by Date: Re: "teach" mathematica an integral
• Next by Date: Re: "teach" mathematica an integral
• Previous by thread: Re: Elegant syntax for multiple conditional assignment?
• Next by thread: Memory Leak in Mathematica?