Nested array comparisons
ambassador at fourthworld.com
Mon Mar 25 08:47:12 CDT 2013
Alex Tweedly wrote:
> try it yourself if you want to see the details - but the bottom line is
> that the arrays have the same keys and contents, comparing the arrays
> gets that right, and comparing the arrayencode() of the arrays says
> (wrongly) that they differ.
> QED - you can't compare the arrayencoding, even in some simple cases.
> -- Alex.
> On 24/03/2013 23:53, Alex Tweedly wrote:
>> OK, let's just test it - focusing on the likelihood that key order
>>> on mouseup
>>> local T1, T2
>>> local tK, j
>>> constant K = 10
>>> repeat with i = 1 to K
>>> put random(i) into t1[i]
>>> end repeat
>>> put the keys of T1 into tK
>>> repeat with i = K down to 1
>>> put line i of tK into j
>>> put T1[j] into T2[j]
>>> end repeat
>>> put "array" && (T1 = T2) & CR & "code" && (arrayencode(t1) is
>>> arrayencode(t2)) \
>>> &CR & arrayencode(t1) &CR&CR & arrayencode(t2)
>>> end mouseup
>>> array true
>>> code false
Interestingly, if you alter the code to use alphabetic keys rather than
numeric, the two encoded arrays always match.
This fits with what I saw when I started working with Mark Waddingham's
arrayEncode parser he sent for my upcoming LiveCode Journal article, in
which most keys were ordered alphabetically.
Since numbers are stored in binary form in encoded arrays, it may be
that no sorting is done for the output as appears to be the case with
Either way, certainly much faster to just use "=" on the arrays
directly. As we see with getting/setting nested arrays in custom props,
arrayEncode's need to iterate through every element makes it
computationally expensive for some tasks.
PS: Alex, I appreciate the code you post on this list, but why do you
always post code with each line preceded by ">"? Makes it more
difficult to strip out the ">" to run the code.
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