Just to throw it out there I still want to add `each` to filter one day. So in this case I think it would be:
filter keys of tArray1 with expression \ each is among the keys of tArray2 and \ tArray1[each] is not tArray2[each] > On 5 Aug 2018, at 11:23 am, Brian Milby via use-livecode > <use-livecode@lists.runrev.com> wrote: > > Here is code that only uses LCS to accomplish the goal (only returning the > keys where they exist in both arrays but the values are different). This > is made to be similar to the way the existing functions work (with the > option to mutate). > > command valueDiff @pDestinationA, @pLeftA, pRightA > local tMutate, tLeft, tRight, tNewRight > if the paramCount is 3 then > put false into tMutate > put pLeftA into tLeft > put pRightA into tRight > else > put true into tMutate > put pDestinationA into tLeft > put pLeftA into tRight > end if > repeat for each key tKey in tLeft > if tKey is among the keys of tRight and \ > tLeft[tKey] is not tRight[tKey] then > put tRight[tKey] into tNewRight[tKey] > next repeat > end if > delete variable tLeft[tKey] > end repeat > if tMutate then > put tLeft into pDestinationA > put tNewRight into pLeftA > else > put tLeft into pDestinationA["1"] > put tNewRight into pDestinationA["2"] > end if > end valueDiff > > My question from an engine perspective is whether it would be faster to > just generate both arrays instead of removing keys from tLeft. I decided > to build the tNewRight to avoid iterating the keys of tRight. > > I'd be pretty confident that Mark's solution will be faster, even with 3 > iterations over the keys. > > On Sat, Aug 4, 2018 at 6:52 PM, Mark Waddingham via use-livecode < > use-livecode@lists.runrev.com> wrote: > >> On 2018-08-04 21:00, Richard Gaskin via use-livecode wrote: >> >>> Mark Waddingham wrote: >>> >>> Yes - so come up with LCS handlers which do that, share them, let's >>>> work together to make them as efficient in LCS as possible and then >>>> see what we can do in the engine to improve their performance (which >>>> I'm guessing is as much the purpose for the proposition as the >>>> syntax). >>>> >>> >>> It is, primarily. The minor convenience is nice too, but you know how >>> much I love to see performance enhancements in the engine. >>> >>> As for implementation, Mark Wieder's looks good: >>> http://lists.runrev.com/pipermail/use-livecode/2018-August/248862.html >>> >> >> One important point here (which I think is something which is often >> overlooked in LC as it is just something we deal with implicitly case by >> case)... >> >> In your use-case for 'valueDiff' - do you need to tell the difference >> between a key value being the empty string and a key value not being >> present at all? >> >> [ i.e. using an array key absence to emulate 'nothing': meaning you are >> actually storing nothing or a value (even the empty string). ] >> >> It might seem like a minor detail, but does change the operation somewhat >> (and potential implementations). >> >> Warmest Regards, >> >> Mark. >> >> -- >> Mark Waddingham ~ m...@livecode.com ~ http://www.livecode.com/ >> LiveCode: Everyone can create apps >> >> _______________________________________________ >> 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 >> > _______________________________________________ > 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 _______________________________________________ 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