Speed up a slow loop
J. Landman Gay
jacque at hyperactivesw.com
Sun Mar 6 15:07:43 EST 2022
On 3/6/22 7:33 AM, Alex Tweedly via use-livecode wrote:
> Could you maybe post the code that you're using that takes 5ms ?
It does a bit more than your test, and I only estimated the number of user words since I'd
tried so many things. I just tested again and this list has 173 words. The dictionary array has
been reduced as per Quentin's suggestion.
I need to get two lists, one for correct words and another for incorrect words. I used to hit
the array directly but my current method uses the difference command. Here's the lookup I'm
using, sDictFile is a script local array:
function checkDictionary pList -- check dictionary for valid words
put empty into tNonWords
split pList by cr and tab
difference pList with sDictFile into tNonWords
set wholematches to true
put fld "wordList" into tWList -- no longer the same as pList
lock screen
repeat for each key k in tNonWords -- mark non-words in list
set the textcolor of word 1 of line lineoffset(k,tWList) of fld "wordList" to "red"
end repeat
unlock screen
if tNonWords <> "" then put keys(tNonWords) into sStats["unknowns"] -- stats for reporting later
difference pList with tNonWords
return keys(pList)
end checkDictionary
I thought the extra time might be due to the field updates, but when I added 8 incorrect words
the time didn't change. It remains steady at 5ms.
So I switched back to hitting the dictionary array directly, and the time for 173 valid words
and 8 invalid words dropped (on Mac) to 1. :)
function checkDictionary pList -- check dictionary for valid words
set wholematches to true
repeat for each line l in pList
if sDictFile[l] = true then
put l & cr after tValidWords
else
put l & cr after tNonWords
end if
end repeat
lock screen
repeat for each line l in tNonWords -- mark non-words in list
set the textcolor of word 1 of line lineoffset(l,pList) of fld "wordList" to "red"
end repeat
unlock screen
if tNonWords <> "" then put tNonWords into sStats["unknowns"]
return tValidWords
end checkDictionary
So there you have it. I'll go back to the original method. I'm glad you questioned this.
--
Jacqueline Landman Gay | jacque at hyperactivesw.com
HyperActive Software | http://www.hyperactivesw.com
More information about the use-livecode
mailing list