Finding non-common elements in two arrays

Wouter wouter.abraham at scarlet.be
Wed Nov 9 07:11:47 EST 2005


Hi again,

A little update on the intersectSpecial function
--> a bit speedier and 3 results in 1 array

function intersectSpecial pListA,pListB, at pR
   if char -1 of pListA is not cr then put cr after pListA
   replace cr with tab & "1" & cr in pListA
   split pListA with cr and tab
   repeat for each line i in pListB
     add 2 to pListA[i]
   end repeat
   repeat for each line i in the keys of pListA
     put i & cr after pR[pListA[i]]
   end repeat
   return the keys of pR <> ""
end intersectSpecial

on mouseUp
   put the millisecs into zap
   get intersectSpecial(fld 1,fld 2,a)
   put the millisecs - zap
   if it then
     put "* Common in both:" & cr & a[3] after tList
     put "* Unique in list A:" & cr & a[1] after tList
     put "* Unique in list B:" & cr & a[2] after tList
     put tList into fld 3
   else put it into fld 3
end mouseUp


Greetings,
Wouter



On 07 Nov 2005, at 01:05, Buster wrote:

> function intersectSpecial pList1,pList2,pMode
>   repeat for each line i in pList1
>     add 1 to a[i]
>   end repeat
>   repeat for each line i in pList2
>     add 2 to a[i]
>   end repeat
>   combine a with cr and tab
> ### elements only in pList1 --> 1
> ### elements only in pList2 --> 2
> ### elements in both lists     --> 3
>   if pMode = "bothCommon" then put "*"&tab&"3" into tFilter
>   else  if pMode = "uniqueA" then put "*"&tab&"1" into tFilter
>   else if pMode = "uniqueB" then put "*"&tab&"2" into tFilter
>   else if pMode = "bothUnique" then put "*"&tab&"1,*" &tab&"2" into  
> tFilter
>   repeat for each item tFilterString in tFilter
>     put a into b
>     filter b with tFilterString
>     replace char 2 to -1 of tFilterString with "" in b
>     put b & cr after tList
>   end repeat
>   return tList
> end intersectSpecial
>
> on mouseUp
>   put the millisecs into zap
>   put intersectSpecial(fld 1,fld 2,"bothUnique") into fld 3
>   put the millisecs - zap
> end mouseUp
>
> May be not a real speed monster but not bad either
> (takes < 500 millisecs for 2 fields with > 25000 lines on an iMac  
> G5 1.8 gHz)
>
> Greetings,
> Wouter



More information about the use-livecode mailing list