Also note that this will test whether numbers are in a half-open
interval, that is, exclusive on the left and inclusive on the right (so
10 < x <= 100 in your example). If you want an exclusive interval like
your solution tests for, you will need to subtract 0 1 from the left
argument.

Marshall

On Sun, Sep 24, 2017 at 09:14:28AM +0100, Marshall Lochbaum wrote:
> Try
> 
> rng =: ] #~ 1=I.
> 
> it's about half as fast because I. is not very well-optimized.
> 
> Marshall
> 
> On Sun, Sep 24, 2017 at 02:29:31AM -0500, Skip Cave wrote:
> > Here's a function I came up with to select numbers in a vector which are
> > within some range.
> > 
> > Find all the numbers between 10 & 100 in a set of random numbers from 0 to
> > 200:
> > 
> > 
> >       rng =. 4 : '((({.x)</y)*.(({:x)>/y))#y'
> > 
> > 
> >     10 100 rng ?50$200
> > 
> > 89 91 32 85 84 27 31 20 28 66 96 93 22 85 39 97 82 35 90 67 34 35 67 95 50
> > 
> > 
> > Between 120 & 180:
> > 
> > 
> >       120 180 rng ?50$200
> > 
> > 148 163 133 165 150 178 121 146 161 179
> > 
> > 
> > Is there a more concise/efficient way to select numbers in a range?
> > 
> > Skip Cave
> > Cave Consulting LLC
> > ----------------------------------------------------------------------
> > 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