On 20/04/2018 20:15, Richard Gaskin via use-livecode wrote:
This is an interesting problem, Andrew.  Thanks for posting it.

Indeed!
One modest performance gain available easily may be to change this:

  repeat for each element tThisItem in tInventoryArray
         if tThisItem["description"] contains tSearchQuery then
            put tThisItem into tSortedInventoryArray[ \
              (the number of elements of tSortedInventoryArray) + 1]
         end if
  end repeat

...to:

  put 0 into i
  repeat for each element tThisItem in tInventoryArray
         if tThisItem["description"] contains tSearchQuery then
            add i to i
            put tThisItem into tSortedInventoryArray[i]
         end if
  end repeat

I'd go for something like
  put tMatchingKeys
  repeat for each line K in the keys of tInventoryArray
         if tInventoryArray [K]["description"] contains tSearchQuery then
            put K & CR after temp
         end if
  end repeat

( or use    repeat for each key K in tInventoryArray
I used that other form because I keep a variable with the set of keys - and that can be re-used to subsequently search subsets with the 'repeat for each line' style of repeat :-)

and then use the key list for subsequent access. Unless you are changing or destroying the 'extracted' elements, it will save you significant time to just use it in-place.

Also,  testing with an earlier version of LC (maybe 7.x ??) showed that "repeat for each key ..." was faster than "repeat for each element ..." - no idea why, and haven't retested in at least a couple of years.

I have a library (announced a couple of days ago - don't use that initial version !!) for doing almost exactly this. For a data table apparently similar to yours (100 columns, 50,000 rows) this kind of simple search takes around 180 millisecs (on an aging Macbook Pro).

NB - the latest version is *much* changed from the version on github - I will finish testing tonight and post the new version to Github and put a copy on my own website (and announce to this list).

-- Alex.
P.S. I agree with Richard's request for a copy of the data / current code if it is not sensitive. Feel free to email directly to me if that is possible.


_______________________________________________
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

Reply via email to