Hashing — Selfie I Index   <<   >>
 

#define DO(n,stmts)  {I i,_n=(n); for(i=0;i<_n;++i){stmts;}}

DO(xn, h=HF(x[i]); while(*h>=0&&x[*h]!=x[i])if(hm==++h)h=h0; if(*h<0)*h=i;   );
DO(yn, h=HF(y[i]); while(*h>=0&&x[*h]!=y[i])if(hm==++h)h=h0; *z++=*h<0?xn:*h;);


If x==y

DO(xn, h=HF(x[i]); while(*h>=0&&x[*h]!=x[i])if(hm==++h)h=h0; if(*h<0)*h=i; *z++=*h;);


•   used in:
x i. x             x ⍳ x
i.~ x              ⍳⍨ x
~.x                ∪x
x f/. y            x f⌸ y

•   factor of  1.7  for 4-byte integers