Pascal 集合(Set)

  • 集合(Set)

    集合是相同类型的元素的集合。Pascal 允许定义设置的数据类型。集合中的元素称为其成员。在数学中,集合通过将成员括在花括号{}中来表示。但是,在Pascal中,集合元素包含在方括号[]中,这被称为集合构造函数。
  • 定义集合类型和变量

    Pascal set 类型定义为
    
    type
    set-identifier = set of base type;
    
    集类型的变量定义为
    
    var
    s1, s2, ...: set-identifier;
    
    或者
    
    s1, s2...: set of base type;
    
    一些有效的集合类型声明的示例是-
    
    type
    Days = (mon, tue, wed, thu, fri, sat, sun);
    Letters = set of char;
    DaySet = set of days;
    Alphabets = set of 'A' .. 'Z';
    studentAge = set of 13..20;
    
  • 集合运算符

    您可以在Pascal集上执行以下集合操作符。
    操作符 说明
    Union 这将连接两个集合,并给出一个包含两个集合中的成员的新集合。
    Difference 获取两个集合的差,并给出一个新集合,其中包含两个集合都不通用的元素。
    Intersection 获取两个集合的交集,并给出两个集合共有的元素的新集合。
    Inclusion 如果集合P中的所有项目也都在Q中,则集合P包含在集合Q中,反之亦然。
    Symmetric difference 获取两个集合的对称差,并给出一组元素,这些元素在这两个集合中的任何一个中而不在它们的交集中。
    In 它检查成员是否在集合内。
    下表显示了Free Pascal支持的所有集合运算符。假设S1和S2是两个字符集,例如-
    
    S1:= ['a','b','c'];
    
    S2:= ['c','d','e'];
    
    操作符 描述 示例
    + 合并两个联合 S1 + S2 得到 ['a', 'b', 'c', 'd', 'e']
    - 两个集合的差异 S1 - S2 得到 ['a', 'b']
    * 集合交集 S1 * S2 得到 ['c']
    >< 两组对称差 S1 >< S2 will 得到 ['a', 'b', 'd', 'e']
    = 检查两组是否相等 S1 = S2 得到布尔值 False
    <> 检查两组是否不相等 S1 <> S2 得到布尔值 True
    <= 包含(检查一组是否为另一组的子集) S1 <= S2 得到布尔值 False
    Include 在集合中包括一个元素; 基本上是集合和相同基本类型的元素的并集 Include (S1, ['d']) 得到 ['a', 'b', 'c', 'd']
    Exclude 从集合中排除元素; 基本上是集合和相同基本类型元素的差 Exclude (S2, ['d']) 得到 ['c', 'e']
    In 检查元素是否在集合中 ['e'] in S2 得到布尔值 True
    以下示例说明了其中一些运算符的用法-
    
    program setColors;
    type  
    color = (red, blue, yellow, green, white, black, orange);  
    colors = set of color;  
     
    procedure displayColors(c : colors);  
    const  
    names : array [color] of String[7]  
      = ('red', 'blue', 'yellow', 'green', 'white', 'black', 'orange');  
    var  
       cl : color;  
       s : String;  
    
    begin  
       s:= ' ';  
       for cl:=red to orange do  
          if cl in c then  
          begin  
             if (s<>' ') then s :=s +' , ';  
             s:=s+names[cl];  
          end;  
       writeln('[',s,']');  
    end;  
     
    var  
       c : colors;  
     
    begin  
       c:= [red, blue, yellow, green, white, black, orange];
       displayColors(c);
    
       c:=[red, blue]+[yellow, green]; 
       displayColors(c);  
    
       c:=[red, blue, yellow, green, white, black, orange] - [green, white];     
       displayColors(c);    
    
       c:= [red, blue, yellow, green, white, black, orange]*[green, white];     
       displayColors(c);  
    
       c:= [red, blue, yellow, green]><[yellow, green, white, black]; 
       displayColors(c);  
    end.
    
    尝试一下
    编译并执行上述代码后,将产生以下结果-
    
    [ red , blue , yellow , green , white , black , orange]
    [ red , blue , yellow , green]
    [ red , blue , yellow , black , orange]
    [ green , white]
    [ red , blue , white , black]