function for greatest object in list less than or equal to a value
Geoff Canyon
gcanyon at gmail.com
Fri Oct 16 12:03:02 EDT 2015
I couldn't find the original code for the offset version, but I took a shot
at it and got the following results, with the repeat solution still faster
(in 6.7.3):
Run Count: 10
Test ID: 1 Looking for greatest value < 500000000
sort 0.920932 499998402
repeat 0.33892 499998402
PMB 0.337938 499998402
ByOffset 0.448632 499998402
Test ID: 2 Looking for greatest value < 5
sort 0.914448
repeat 0.223951
PMB 0.213347
ByOffset 0.426248
Test ID: 3 Looking for greatest value < 999999995
sort 0.913603 999999959
repeat 0.439324 999999959
PMB 0.51457 999999959
ByOffset 0.46632 999999959
The code:
on mouseUp
repeat 1000000
put random(1000000000),"" after L
end repeat
put 500000000 into testcase[1]
put 5 into testcase[2]
put 999999995 into testcase[3]
put 10 into runCount
repeat with i = 1 to runCount
repeat with testID = 1 to 3
repeat for each item testType in "sort,repeat,PMB,ByOffset"
put i && testID && testType into fld 3
put the long seconds into S
do format("put greatestLessThan%s(L,testcase[%s]) into
R[%s][%s]",testType,testID,testType,testID)
add (the long seconds - S) to T[testType][testID]
end repeat
end repeat
end repeat
put "Run Count:" && runCount & cr & cr into fld 3
repeat with testID = 1 to 3
put "Test ID:" && testID && "Looking for greatest value <" &&
testcase[testID] & cr after fld 3
repeat for each item testType in "sort,repeat,PMB,ByOffset"
put testType && T[testType][testID]/runCount &&
R[testType][testID] & cr after fld 3
end repeat
put cr after fld 3
end repeat
end mouseUp
function greatestLessThanSort pList,V
sort items of pList descending numeric
sort items of pList by each >= V
return item 1 of pList
end greatestLessThanSort
function greatestLessThanRepeat pList,V
put empty into R
repeat for each item i in pList
if i < V and i > R then put i into R
end repeat
return R
end greatestLessThanRepeat
function greatestLessThanPMB tList,maxVal
repeat for each item i in tList
if i < maxVal then put i & comma after outList
end repeat
if outList is empty then return empty else return max(outList)
end greatestLessThanPMB
function greatestLessThanByOffset pList,V
put "",V after pList
sort items of pList numeric
return item (itemOffset(V,pList) - 1) of pList
end greatestLessThanByOffset
On Wed, Oct 14, 2015 at 6:27 PM, Craig Newman <dunbarx at aol.com> wrote:
> Hi.
>
> The param "3" would be added to the list. The sorted list would be:
> "2,3,4". When the itemOffset finds the "3", the item just before it would
> be "2". That is how it works. To find the item just before itemOffset does.
>
> This is faster than any of the "repeat for each..." variants I have seen
> here. The reason, as I stated earlier as an uninformed opinion, is that the
> low-level "sort" routine beats the high-level "repeat" routine.
>
> Craig
>
> Sent from my iPhone
>
> > On Oct 14, 2015, at 2:25 PM, Dr. Hawkins <dochawk at gmail.com> wrote:
> >
> >> On Mon, Oct 12, 2015 at 6:35 AM, <dunbarx at aol.com> wrote:
> >>
> >> My gadget adds the index in a parameter to the function. if it already
> >> exists in the list, the addition is superfluous, but harmless.
> >
> > But if the search list is "2, 4", and the search value is 3, doesn't this
> > return "3" rather than 2?
> >
> >
> > --
> > Dr. Richard E. Hawkins, Esq.
> > (702) 508-8462
> > _______________________________________________
> > use-livecode mailing list
> > use-livecode at lists.runrev.com
> > Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> > http://lists.runrev.com/mailman/listinfo/use-livecode
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
>
More information about the use-livecode
mailing list