取得两个数组的交集、并集和差集,可以使用FilterIn/FilterNotIn以及intersect、union、union2、minus等集合操作.
FilterIn/FilterNotIn的典型应用,可以支持一维数组的过滤:
FilterNotIn(array(1,2,3,4,5,5,6,7),array(1,2,3,4),nil)
结果:array(5,5,6,7)
也可以使用集合操作来做:
array(1,2,3,4,5,5,6,7) minus array(1,2,3,4);
结果:array(5,6,7)
此外,FilterIn/FilterNotIn也可以以行为整体进行过滤:
a:=array();
a[0]["A"]:=1;a[0]["B"]:=2;a[0]["C"]:=3;
a[1]["A"]:=2;a[1]["B"]:=3;a[1]["C"]:=4;
a[2]["A"]:=1;a[2]["B"]:=2;a[2]["C"]:=3;
a[3]["A"]:=4;a[3]["B"]:=5;a[3]["C"]:=6;
b:=array();
b[0]["A"]:=1;b[0]["B"]:=2;b[0]["C"]:=3;
b[1]["A"]:=2;b[1]["B"]:=3;b[1]["C"]:=4;
return filterin(a,b,nil);
结果是:array(("A":1,"B":2,"C":3),("A":2,"B":3,"C":4),("A":1,"B":2,"C":3))
当然intersect、union、union2、minus这些集合运算符速度都很不错。集合和前面的FilterIn函数有个很大的不同点,就是集合运算(除union)得到的元素不允许重复。