Re: Getting rid of those deprecated Do[] loops?
- To: mathgroup at smc.vnet.net
- Subject: [mg92772] Re: Getting rid of those deprecated Do[] loops?
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Mon, 13 Oct 2008 06:16:43 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <gcsctj$8mj$1@smc.vnet.net>
AES wrote: > Trying to think of a "two-variable iterator" approach that will let one > produce the same results as > > data = { }; > Do[ > Do[ > data = AppendTo[data, {aa, bb, xx, yy}], > {bb, 10, 30, 10}], > {aa, 1, 2}]; > Print[data // TableForm]; > > without using those universally deprecated (and even worse, nested) > Do[ ] loops, not to mention the equally deprecated AppendTo[]. > > Somewhat to my surprise, the construction > > Table[{aa = kk[[1]]; bb = kk[[2]]; aa, bb, xx, yy}, > {kk, {{1, 10}, {1, 20}, {1, 30}, {2, 10}, {2, 20}, > {2,30}}} > ] // TableForm > > using a two-dimensional iterator iterator variable kk, actually does > this, though the "iterator list" is obviously a bit messy. > > Simpler way of defining an iterator to do this? In more than two > iterator dimensions (aa, bb, cc,...)? (with no functional dependence > between the values of aa, bb, cc). > > Is the concept of a multi-dimensional iterator variable kk mentioned in > the M6 documentation anywhere? (A search on "Iterate" or "iteration" > brings up 193 hits at 10 per screen.) (* Compare the order of the iterators in *) Flatten[ Table[{aa, bb, xx, yy}, {aa, 1, 2}, {bb, 10, 30, 10}], 1] {{1, 10, xx, yy}, {1, 20, xx, yy}, {1, 30, xx, yy}, {2, 10, xx, yy}, {2, 20, xx, yy}, {2, 30, xx, yy}} (* versus *) data = {}; Do[Do[data = AppendTo[data, {aa, bb, xx, yy}], {bb, 10, 30, 10}], {aa, 1, 2}] data {{1, 10, xx, yy}, {1, 20, xx, yy}, {1, 30, xx, yy}, {2, 10, xx, yy}, {2, 20, xx, yy}, {2, 30, xx, yy}} Regards, -- Jean-Marc