FAQ > 金融建模 > 建模问题 > 语法相关

Q:如何在数组中过滤掉子集中相同的行记录?    

  • A:在数组中过滤子集相同的行记录推荐三种实现方式:
    序号模型说明
    1Minus计算两个集合的差集(数组计算行的差集),会对集合结果做去重处理
    详情:FAQ:Minus差集运算符
    2FilterNotIn过滤子集中的元素(行|列子集都可以过滤),不会对原结果做去重处理
    详情:FAQ:FilterNotIn
    3Sqlin通过该模型做条件判断借助TSSQL语句过滤子集,不会对原结果做去重处理
    详情:FAQ:Sqlin

    实现范例
    范例1.通过minus过滤子数组中的行
      a:=array((0,0,0),
           (1,0,2),
           (2,1,4),
           (3,1,6),
           (4,2,8),
           (4,2,8),
           (5,2,10));
      b:=array((1,0,2),(3,1,6),(5,8,7));
      return a minus b;

    结果:过滤数组a与b的差集,并对a做了去重处理


    范例2.通过FilterNotIn过滤子数组中的行
      a:=array((0,0,0),
           (1,0,2),
           (2,1,4),
           (3,1,6),
           (4,2,8),
           (4,2,8),
           (5,2,10));
      b:=array((1,0,2),(3,1,6));
      return FilterNotIn(a,b,nil);

    结果:仅过滤差集,未做去重处理



    范例3.通过sqlin过滤子数组中的行
      a:=array((0,0,0),
           (1,0,2),
           (2,1,4),
           (3,1,6),
           (4,2,8),
           (4,2,8),
           (5,2,10));
      b:=array((1,0,2),(3,1,6));
      return select * from a where not(thisrow sqlin b) end;

    结果:仅过滤差集,未做去重处理