On Tue, Oct 13, 2015 at 4:35 AM, hh <h...@livecode.org> wrote: > function getMaxLessThan tList,maxVal > repeat for each item i in tList > if i < maxVal then put i & comma after outList > end repeat > return max(outList) > end getMaxLessThan >
This returns 0 if there is no valid result, rather than empty. I modified it like this to get the correct result in that case: function getMaxLessThan 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 getMaxLessThan I then created three test cases, searching for a small upper limit, a mid upper limit, and a high upper limit, as shown in the code. I saw variability in the results, so I wrote the test to run 10 times and take the average. Here are the results, running on a MB Pro in LC 6.7.3: Run Count: 10 Test ID: 1 Looking for greatest value < 500000000 sort 0.948062 499999481 repeat 0.347538 499999481 PMB 0.354209 499999481 Test ID: 2 Looking for greatest value < 5 sort 0.950574 repeat 0.225004 PMB 0.212485 Test ID: 3 Looking for greatest value < 999999995 sort 0.920444 999999683 repeat 0.442339 999999683 PMB 0.527431 999999683 In single runs I've seen PMB beat repeat on test 1. PMB is consistently slightly faster on test 2, and consistently slower (more than the difference on test 2) on test 3. Unless there is a difference based on hardware or LC version, I think it comes down to taste for which to use between the two. I never expected the sort version to be even as close as it was, but for most purposes even it would seem to be an okay choice. Code used: 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" 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" 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 _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode