There should be a "unique" option on sort . . .

Richard Gaskin ambassador at fourthworld.com
Mon Jan 6 14:41:07 EST 2014


Peter Haworth wrote:

> Hi Richard,
> It's not so much the arithmetic operation or putting a value into the array
> element, it's the repeat loop itself which I don't think is needed.  It can
> be replaced with "combine pData with return and return".  That one line
> gets rid of the duplicates.  So the function would look like this:
>
> function UniqueListFromArray2 pData
>    local tKeys
>    combine pData with return and return
>    put the keys of pdata into tKeys
>    sort tKeys
>    return tKeys
> end UniqueListFromArray2
>
> I came up with that because the OP mentioned that an engine-embedded way to
> de-dup would be faster than any user written handler, which seems like a
> reasonable assumption.
>
> Pretty academic really because it seems like all the solutions work
> acceptably fast but nevertheless interesting to compare.

Excellent!

I added a new function to the mix which uses the split command, but at 
first I found that it was failing the sanity check - the results were 
different.

After looking over the results I discovered an interesting anomaly:  the 
split command is inherently case sensitive, and turning the caseSenstive 
to false within a handler that uses it has no effect.

Is that a bug?

So the only way to use split is when you want to a case-sensitive 
results, and if so you'll need to set the caseSensitive to true for both 
functions since it governs the sort results:

function UniqueListFromArray3 pData
    set the caseSensitive to true
    split pData using cr and cr
    put the keys of pData into tKeys
    sort lines of tKeys
    return tKeys
end UniqueListFromArray3

So when case sensitivity will do what you need, the result is pretty 
impressive - about half the time required for the other fastest option:

10 iterations on 10000 lines of 5 or fewer chars:
"Add 1" Array: 58 ms (5.8 ms per iteration)
"Split" Array: 24 ms (2.4 ms per iteration)
Results match - Each list has 997 lines

--
  Richard Gaskin
  Fourth World
  LiveCode training and consulting: http://www.fourthworld.com
  Webzine for LiveCode developers: http://www.LiveCodeJournal.com
  Follow me on Twitter:  http://twitter.com/FourthWorldSys




More information about the use-livecode mailing list