集合类型

集合是由多个具有相同类型的元素所组成的,集合中的元素是某种数据类型的值。这些数据类成为集合的基类型。

集合在内部以位的形式存储它的元素,这使得在速度和内存利用上都更有效。集合如果少于32个元素,它就存储在 CPU 的寄存器中,这样的效率就更高了,为了用集合类型得到更高的效率。记住,集合的基本类型的元素数目要小于32。

集合中的元素是无序的,且集合中的元素不能够出现重复,有重复元素只作为一个元素。

一个集合最多可有256个元素,即集合类型的基类型的取值范围为0~255,因此声明的集合类型不能是整型,实型以及其他构造类型。

集合的基类型可以设置为字符型,布尔型,枚举型以及子界型和顺序类型。

Type下声明集合:

1 type
2   集合类型名称 = Set of 基类型;
1 type
2     TCharSet = set of char;    //字符型
3     TEnum = (Monday, Tuesday, Wednesday, Thursday, Friday);//枚举型
4     TEnumSet = set of TEnum;    //包含了TEnum值得任何组合
5     TSubrangeset = set of 1..10;    //子界型
6     TAlphaSet = set of 'A'..'Z';   
1 type
2   Language = set of (English,German,France);//枚举
3   char1 = set of char; //字符
4   number1 = set of 1..9; //子界
1  注意,一个集合最多只能有255个元素。另外,只有有序的类型才能跟关键字set of ,因此下面的代码是非法的
2 
3 type
4     TIntSet = set of Integer;    //非法,太多的元素
5     TStrSet = set of String;     //非法,不是有序的类型

过程中使用集合:

 1 procedure TForm1.Button5Click(Sender: TObject);
 2 var
 3   ch : char1;
 4   num : number1;
 5 begin
 6   ch := ['a'..'z'];
 7   //exclude(ch,'c');//移除一个集合元素
 8   include(ch,'c');//添加一个集合元素
 9   //num := [10];
10   include(num,10);
11   if 10 in num then
12     showmessage('成功');
13   if 'c' in ch then
14     showmessage('包含');
15 end;
 1 当使用集合的元素的时候,使用方括号。下面代码表明如何使用集合类型的变量并给它赋值
 2 1.在type中定义并赋值
 3 
 4 type
 5     TcharSet = set of char;
 6 var
 7     CharSet : TCharSet;
 8 begin
 9     CharSet :=['A'..'J','a','m'];
10 end;
11 2.在过程var中定义并赋值
12 var
13     SubrangeSet : set of 1..10;    //可能是1到10的任意数
14 begin
15     SunrangeSet := [1,2,4..6];
16 end;

集合的值

  1.集合的值放在一对方括号里,中间各元素使用逗号隔开。如:[1,2,5]和['a', 'e', 'i']都是集合

  2.在集合中可以没有任何元素,这样的集合称为空集。[]空集

  3.在集合中,如果元素的值是连续的,则可用子界型的表示法表示。例如:[1,2,3,4,5,6,10,15] 可以表示成[1..5,10,15]

  4.集合的值与方括号内元素出现的次序无关。例如[1,5,8]和[1,8,5]的值相等

  5.在集合中同一个元素的重复出现对集合的值没有影响。例如[1,8,5,1,8]与[1,5,8]的值相等

集合的应用实例:

1 type
2   Language = set of (English,German,France);//枚举  
 1 procedure TForm1.Change(Sender: TObject);
 2 begin
 3   if checkbox4.Checked then
 4   begin
 5     L := L + [English];
 6   end
 7   else
 8   begin
 9     L := L - [English];
10   end;
11   if checkbox5.Checked then
12   begin
13     L := L + [German];
14   end
15   else
16   begin
17     L := L - [German];
18   end;
19   if checkbox6.Checked then
20   begin
21     L := L + [France];
22   end
23   else
24   begin
25     L := L - [France];
26   end;
27   if English in L then
28     checkbox1.Checked := true
29   else
30     checkbox1.Checked := false;
31   if German in L then
32     checkbox2.Checked := true
33   else
34     checkbox2.Checked := false;
35   if France in L then
36     checkbox3.Checked := true
37   else
38     checkbox3.Checked := false;
39 end;
40 
41 procedure TForm1.FormCreate(Sender: TObject);
42 begin
43   checkbox4.OnClick := change;
44   checkbox5.onclick := change;
45   checkbox6.OnClick := change;
46 end;

 

原文地址:https://www.cnblogs.com/fansizhe/p/12602763.html