先转换为字符串,再求LENGTH();

解决方案 »

  1.   


    不管是循环,还是length.他总的有一个算法。    我觉得可借用二分法。
    效率肯定比循环高。
      

  2.   

    可以用查找1的个数的方法!因为集合使用二进制的位来表示的:
    procedure TForm1.Button1Click(Sender: TObject);
    var
     aset: set of 1..9;
     info:PPropInfo;
     p:pointer;
    begin
     aset := [3]; //[],[1],[2],[3],[4].....
     p:=@aset;
     caption:=inttostr(byte(p^));
    end;
    从上面的代码明显可以看出来!
    []=0
    [1]=2  //第二位
    [2]=4  //第三位

    所以,只要统计byte(p^)中1的位数的个数就可以了。
    :)
      

  3.   

    上面也就是说明了为什么集合的基类最多有256个元素的原因:一个byte是8位,2^8=256。
      

  4.   

    啊,错了,最多可以不是1个byte,是32个byte。:),不知道大家明白没有,没有明白就算了,我讲不清楚了。:)
      

  5.   

    DELPHI在设计是还是有些小缺憾,对集合元素个数的操作需要自己来完成,效率也不是很高