Prompted by Brian, I see I've had a 'duh' moment. The looping is on the number 
of items in the boxed list not on items in the amend, my test case therefore 
only loops twice. I need to compare performance for lists of more than 2 items 
to get a better idea of the relative performance of looping vs not-looping.

> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Sherlock, Ric
> Sent: Monday, 31 March 2008 10:26
> To: Programming forum
> Subject: RE: [Jprogramming] "de-loop" amend
>
> Thanks to both Brian and Rob for their solutions. They both
> helped me improve my understanding of working with amend.
>
> I was surprised to find however that the looped solution is
> faster as well as leaner than the more J'ish solutions.
>
>    ts=: 6!:2 , 7!:[EMAIL PROTECTED]
>
>    rndidx=: 3 : 0
>   nidx=.<.0.75* */$y
>   ~.(nidx,2)?.@:$ $y
> )
>    rndcnts=:  # ?. */@:$
>
>    amendloop=: 4 : 0
>  n=.''
>  'cnts idx'=. x
>  for_cnt. cnts do.
>    n=.n,< (>cnt) (<"1 cnt_index{::idx) } cnt_index{::y
>  end.
> )
>
>    box_amend =:  4 : '(>{:x) (}:x) } y'
>    box_amendb =: 4 : '<(>1{x) (>0{x) } >y'
>
>    LOOP=: '(contents;<idx) amendloop m'
>    BS=:    ',(,.<"1 contents,.<"1 each idx)'
>    BS=: BS,'((>@[EMAIL PROTECTED])`(>@{:@[)`(>@])})each "1 ,.m'
>    RH1=:  '((<"1 each idx) ,each <"0 contents) box_amend each m'
>    RH2=:  '((<"1 each idx),.contents) box_amendb"1 0 m'
>
>    m=: (1000 100$0);5000 40$0
>    idx=: rndidx each m
>    contents=: rndcnts each idx
>    ts LOOP
> 0.0415161703513 10857920
>    ts BS
> 0.0964354408172 15760576
>    ts RH1
> 0.0795365751792 16462144
>    ts RH2
> 0.0673653355385 14716352
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to