Re: Mapping to Create Nested Loops
- To: mathgroup at smc.vnet.net
- Subject: [mg119426] Re: Mapping to Create Nested Loops
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Thu, 2 Jun 2011 19:11:59 -0400 (EDT)
As long as the inner pure function is used in a criteria or pattern that is not
evaluated until the outer pure function is mapped, it seems to work.
data = RandomInteger[9, {3, 5, 5}]
{{{4, 0, 5, 0, 5}, {0, 1, 1, 2, 8}, {0, 1, 8, 1, 5}, {8, 3, 2, 9, 1}, {9, 1,
0, 1, 3}}, {{8, 4, 3, 5, 5}, {0, 6, 1, 0, 5}, {1, 1, 7, 8, 0}, {8, 3, 9, 4,
7}, {0, 5, 4, 7, 8}}, {{1, 9, 0, 4, 8}, {8, 2, 9, 7, 8}, {7, 9, 9, 5,
8}, {8, 4, 3, 0, 3}, {0, 7, 5, 0, 0}}}
Select[#, OddQ[#[[3]]] &] & /@ data
{{{4, 0, 5, 0, 5}, {0, 1, 1, 2, 8}}, {{8, 4, 3, 5, 5}, {0, 6, 1, 0, 5}, {1, 1,
7, 8, 0}, {8, 3, 9, 4, 7}}, {{8, 2, 9, 7, 8}, {7, 9, 9, 5, 8}, {8, 4, 3 ,
0, 3}, {0, 7, 5, 0, 0}}}
Cases[#, _?(OddQ[#[[3]]] &)] & /@ data
{{{4, 0, 5, 0, 5}, {0, 1, 1, 2, 8}}, {{8, 4, 3, 5, 5}, {0, 6, 1, 0, 5}, {1, 1,
7, 8, 0}, {8, 3, 9, 4, 7}}, {{8, 2, 9, 7, 8}, {7, 9, 9, 5, 8}, {8, 4, 3 ,
0, 3}, {0, 7, 5, 0, 0}}}
DeleteCases[#, _?(EvenQ[#[[3]]] &)] & /@ data
{{{4, 0, 5, 0, 5}, {0, 1, 1, 2, 8}}, {{8, 4, 3, 5, 5}, {0, 6, 1, 0, 5}, {1, 1,
7, 8, 0}, {8, 3, 9, 4, 7}}, {{8, 2, 9, 7, 8}, {7, 9, 9, 5, 8}, {8, 4, 3 ,
0, 3}, {0, 7, 5, 0, 0}}}
GatherBy[#, OddQ[#[[3]]] &] & /@ data
{{{{4, 0, 5, 0, 5}, {0, 1, 1, 2, 8}}, {{0, 1, 8, 1, 5}, {8, 3, 2, 9, 1}, {9 ,
1, 0, 1, 3}}}, {{{8, 4, 3, 5, 5}, {0, 6, 1, 0, 5}, {1, 1, 7, 8, 0}, {8, 3,
9, 4, 7}}, {{0, 5, 4, 7, 8}}}, {{{1, 9, 0, 4, 8}}, {{8, 2, 9, 7, 8}, { 7,
9, 9, 5, 8}, {8, 4, 3, 0, 3}, {0, 7, 5, 0, 0}}}}
SortBy[#, OddQ[#[[3]]] &] & /@ data
{{{0, 1, 8, 1, 5}, {8, 3, 2, 9, 1}, {9, 1, 0, 1, 3}, {0, 1, 1, 2, 8}, {4, 0 ,
5, 0, 5}}, {{0, 5, 4, 7, 8}, {0, 6, 1, 0, 5}, {1, 1, 7, 8, 0}, {8, 3, 9, 4,
7}, {8, 4, 3, 5, 5}}, {{1, 9, 0, 4, 8}, {0, 7, 5, 0, 0}, {7, 9, 9, 5,
8}, {8, 2, 9, 7, 8}, {8, 4, 3, 0, 3}}}
SplitBy[#, OddQ[#[[3]]] &] & /@ data
{{{{4, 0, 5, 0, 5}, {0, 1, 1, 2, 8}}, {{0, 1, 8, 1, 5}, {8, 3, 2, 9, 1}, {9 ,
1, 0, 1, 3}}}, {{{8, 4, 3, 5, 5}, {0, 6, 1, 0, 5}, {1, 1, 7, 8, 0}, {8, 3,
9, 4, 7}}, {{0, 5, 4, 7, 8}}}, {{{1, 9, 0, 4, 8}}, {{8, 2, 9, 7, 8}, { 7,
9, 9, 5, 8}, {8, 4, 3, 0, 3}, {0, 7, 5, 0, 0}}}}
Bob Hanlon
---- "Szabolcs Horv=C3=A1t" <szhorvat at gmail.com> wrote:
==========================
On 2011.06.01. 13:27, Bob Hanlon wrote:
> GatherBy[myArray, #[[3]]&]
>
> GatherBy[#, #[[3]]&]& /@ myListOfArrays
>
>
Is this kind of use of nested functions with # guaranteed to be safe
(let's disregard readability concerns for now)?
It appears that # indeed is always the argument of the innermost
function, but I couldn't find this stated in the docs. Instead, it's
suggested in the docs (page for Slot) to use named arguments with nested
functions (but those aren't without name-conflict / localization issues
either)