zoukankan      html  css  js  c++  java
  • Delphi中的Set类型的使用心得

    先看例子。如下所示:

    type

      TCharSet = set of char;

      TEnum = (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);

      TEnumSet = set of TEnum;

    procedure TForm1.Button3Click(Sender: TObject);

    var

      charset : TCharSet;

      enumSet : TEnumSet;

      intset : set of 0..9;

      alphaset : set of 'a'..'c';

    begin

      charset := ['A'..'Z', 'a', 'b', 'h'..'z'];

      enumSet := [Saturday, Sunday];

      intset := [1, 2, 4..6];

      alphaset := ['a'..'e'];

      Include(charset, 'c');                                                                               //追加c

      charset := charset + ['d'];                                                                      //追加d

      Exclude(charset, 'x');                                                                              //删除x

      charset := charset - ['y', 'z'];                                                                  //删除y,z

      ShowMessage(BoolToStr('n' in charset, True));                                      //True

      ShowMessage(BoolToStr(['a'..'d'] = charset * alphaset, True));             //True

    end;

    -------------------------------------------------------------------------

    +(Include): 追加

    - (Exclude):删除

    * : 交集

    注意:

    集合最多可以容纳256个元素。所以下面的定义是无效的:

    type

      TStringSet = set of String;

      TIntegerSet = set of Integer;

    集合在内部把元素按单独的位进行存储,使得集合操作在速度和内存上相当高效。少于32个元素的集合可以用CPU寄存器操作,这个效率更高。超过32个元素(含32个)的集合(比如char集合--255个元素)则存储在内存中。所以为了更高效,尽量定义集合中基本类型的元素数量少于32个。

    资料:

    集合(Set)是由具有某些共同特征的元素构成的一个整体,这些元素必须是有序类型,如,整型、布尔型、字符型、枚举型和子界型。
        1.集合类型的定义
        集合类型变量定义的语法格式为:
        type
        <类型标识符>=set of<基类型>
    其中,基类型是指集合中的元素必须是同一有序数据类型。Pascal语言规定集合的元素个数最多不得超过256个;因此基类型的序数值必须在O~255之间,例如:
        type
        Name=set of char;
        Boolset=set of boolean;
        Weekday=(Sun,Mon,Tue,Wed,Thu,Fri,Sat);
        Week:set of weekday;
        2.集合变量的定义    ’
        集合类型定义的语法格式为:
        (1)已定义集合类型
        var<变量名>:<集合类型标识符>;
        (2)与类型定义结合在一起  .
        var<变量名>:set of<基类型>;
        傻f如:    var si:set oi-O..25 5;
        sn:Name;
        si是整数类型的集合变量,sn是Name集合类型的变量。
        3.集合变量的赋值
        程序中可以对集合变量赋集合常量值,例如:
        si:=[1..6,9];
        sn:=  [’A’..’Z’,’a’..’z’,’O’..’9’];
        集合类型变量的取值范围为包含空集在内的集合的所有子集,但是集合中的元素不能重复出现o
      4.集合类型的运算
      集合类型能够进行比较运算和集合运算。
      集合的比较运算有“<=”、“>=”和“in/",分别表示包含于、包含和属于运算。此外还有
    “=”、“<>/"表示集合相等和集合不等,例如:[1,2]<=[1..3]的结果是true;1 in[O..6]的结果是true。
        集合运算有并(+)、交(木)、差(一)运算,它们的结果还是一个集合。例如:
        集合A:[1,2,6,7]
        集合B:[2,3,5,6,7,9]
        集合A+B:[1,2,3,5,6,7,9](由属于集合A或属于集合B的所有元素组成)
        集合A*B:[2,6,7](由属于集合A又属于集合B的所有元素组成)
        集合A-B:[1](由属于集合A而不属于集合B的所有元素组成)

  • 相关阅读:
    P2155 [SDOI2008]沙拉公主的困惑
    P4345 [SHOI2015]超能粒子炮·改
    乘法逆元
    P1608 路径统计
    P1342 请柬
    一些网址
    20/08/02测试
    ivqBlog 开源博客 (angularjs + express + mongodb)
    angularjs, nodejs, express, gulp, karma, jasmine 前端方案整合
    参照nopCommerce框架开发(NextCMS)
  • 原文地址:https://www.cnblogs.com/Little-Star/p/7365077.html
Copyright © 2011-2022 走看看