Re: Elegant syntax for multiple conditional assignment?
- To: mathgroup at smc.vnet.net
- Subject: [mg54463] Re: [mg54337] Elegant syntax for multiple conditional assignment?
- From: Scott Hemphill <hemphill at hemphills.net>
- Date: Sun, 20 Feb 2005 00:11:47 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
On Sat, 19 Feb 2005, DrBob wrote: > It's just the same trick on another level. Like this: > > Clear@update > update[cond_List][old_List, new_List] := Thread@If[cond, new, old] > > n = 6; > old = {Array[olda, {n}], Array[oldc, {n}], > Array[oldx, {n}], Array[oldy, {n}]}; > new = {Array[newa, {n}], Array[newc, {n}], > Array[newx, {n}], Array[newy, {n}]}; > cond = Table[Random[Integer] == 1, {n}] > > {True, True, False, False, True, False} > > update[cond] @@@ Transpose@{old, new}; > TableForm[%, TableHeadings -> {{"a", "c", "x", "y"}, cond}] > > TableForm[{{"", True, True, False, False, True, False}, > {"a", newa[1], newa[2], olda[3], olda[4], newa[5], olda[6]}, > {"c", newc[1], newc[2], oldc[3], oldc[4], newc[5], oldc[6]}, > {"x", newx[1], newx[2], oldx[3], oldx[4], newx[5], oldx[6]}, > {"y", newy[1], newy[2], oldy[3], oldy[4], newy[5], oldy[6]}}, > TableHeadings -> {{"a", "c", "x", "y"}, > {True, True, False, False, True, False}}] Thanks a million! I'm glad I wasn't satisfied with just one solution to the problem. I'd hoped that I'd learn something new if I just asked somebody, and I sure have. Two constructs that I've only been vaguely aware of are Thread and Through. Also, although I've been comfortable with the abbreviations "/@" and "@@", I haven't been making use of "@" and "@@@". Thanks for the examples. Scott -- Scott Hemphill hemphill at alumni.caltech.edu "This isn't flying. This is falling, with style." -- Buzz Lightyear