知识库 > Tinysoft代码优化 > 2 优化技巧

2.2 集合运算    

  • 取得两个数组的交集、并集和差集,可以使用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)得到的元素不允许重复。