ranging lists

J. Landman Gay jacque at hyperactivesw.com
Wed Jan 29 15:33:01 EST 2003


On Wednesday, January 29, 2003, at 04:57 AM, Ron wrote:
> 
> I have 2 lists. I need to check whether the values of list 2 fall 
> within the
> range of the values of list 1. eg.
> 
> list 1
> 1 10
> 20 25
> 45 55
>
> list 2
> 1,3,12,23,34,45,52,78

Arrays are very fast. I didn't benchmark it, but see if something like 
this is faster than what you are using now:

function checkRanges
   put fld 1 into theRanges -- this is List 1
   repeat for each line l in theRanges -- make an array
     put word 1 of l + 1 into theStart
     put word 2 of l - 1 into theStop
     repeat until theStart > theStop
       put theStart into theRangeArray[theStart]
       add 1 to theStart
     end repeat
   end repeat
   -- now check the items in list 2 against the array:
   put fld 2 into theList
   repeat for each item i in theList
     put (theRangeArray[i] <> empty) & comma after theResults
   end repeat
   return theResults
end checkRanges

This returns a list of booleans corresponding to each item in List 2, 
indicating whether each item is within range or not.

Creating the initial array probably takes the most time (but it is still 
very fast.) If this is something you will use repeatedly, build the 
array only once and store it in a global variable so you don't have to 
rebuild it each time you want to use it.

-- 
Jacqueline Landman Gay         |     jacque at hyperactivesw.com
HyperActive Software           |     http://www.hyperactivesw.com




More information about the use-livecode mailing list