http://blog.sina.com.cn/s/blog_9e2e8405010180jy.html
delphi基础补充
我觉得,集合很实用,以前在程序中总要先从数据库中取出好多元素,然后逐个判断,现在知道集合这个概念,兴奋ing!哈哈啊。
集合是P a s c a l特有的数据类型,在Visual Basic、C或C + +都没有(虽然C++ Builder提供了一种模
板类称为集合,它模仿P a s c a l集合的行为)。集合用一种有效的手段来表示一组有序数、字符和枚
举值。
声明一个集合用关键字set of,并在其后跟上有序类型或一个集合可能值的有限子集。示例如下:
type
TCharSet=set of char; // 可能的值:# 0 - # 2 5 5
TEnum = ( Monday, Tuesday, Wednesday, Thursday, Friday ) ;
TEnumSet=set of TEnum; // 包含了T E n u m值的任何组合
TSubrangeSet=set of 1..10; // 可能的值:1 - 1 0
TAlphaSet=Set of 'A'..'z'; // 可能的值:' A ' - ' z '
注意,一个集合最多只能有2 5 5个元素。另外,只有有序的类型才能跟关键字 set of,因此下列的
代码是非法的:
t y p e
TIntSet=set of Integer; // 非法:太多的元素
TStrSet=set of string; // 非法:不是有序的类型
集合在内部以位的形式存储它的元素,这使得在速度和内存利用上更有效。集合如果少于 3 2个元
素,它就存储在C P U的寄存器中,这样效率就更高了,为了用集合类型得到更高的效率。记住,集合
的基本类型的元素数目要小于3 2。
1. 使用集合
当使用集合的元素时,使用方括号。下面代码表明如何使用集合类型的变量并给它赋值。
(1)直接在所在过程中var中定义:
var
SubrangeSet:set of 1..10;(可能是1到10中任何数)
begin
SubrangeSet:=[1,2,4..6];
end;
(2)在Type中定义:
type
TCharSet=set of char;
var
CharSet:TCharSet;
begin
CharSet:=['A'..'J','a','m'];
end;
2. 集合操作符
Object Pascal提供了几个用于集合的运算符,用这些运算符可以判断集合和集合之间的关系,对
合增删元素,对集合进行求交集运算。
(1) 关系运算
用in运算符来判断一个给定的元素是否在一个集合中,下面的代码判断在前面所定义的集合
CharSet中是否有字母‘S’:
if 'S' in CharSet then
/ /继续运行
下面的代码判断在EnumSet中是否没有Monday :
if not (Monday in EnumSet) then
/ /继续运行
(2) 增删元素
用+、-运算符或Include( )和Exclude( )过程,能对一个集合变量增删元素:
Include(CharSet, 'a');/ /在集合中增加'a' ;
CharSet : = CharSet+['b'] ;/ /在集合中增加'b' ;
Exclude(CharSet, 'x');/ /在集合中删除'x' ;
CharSet:=CharSet-['y', 'z'];/ /在集合中删除'y'和'z' ;
提示 尽可能地用Include()和Exclude()来增删元素,尽可能地少用+、-运算符。因为Include()和
Exclude()仅需要一条机器指令,而+和-需要13+6n(n是集合的按位的长度)条机器指令。
(3) 交集
用*运算符来计算两个集合的交集,表达式Set1 * Set2的结果是产生的集合的元素在Set1和
Set2集合
都存在,下面的例子用来判断在一个给定的集合中是否有某几个元素:
if {'a', 'b', 'c'}*CharSet={'a', 'b', 'c'} then
/ /继续程序
////////////////////////另一篇文章//////////
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls;
type
TEnum = (One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten);
TSetEnum = set of TEnum;
TForm4 = class(TForm)
GroupBox1: TGroupBox;
Button1: TButton;
Button2: TButton;
GroupBox2: TGroupBox;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
private
SetEnum, SetEnum1, SetEnum2: TSetEnum ;
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
procedure TForm4.Button1Click(Sender: TObject);
var
s1, s2: string;
begin
s1 := 'aaa';
s2 := s1;
s2 := 'bbb';
ShowMessage('字符串S1的值: ' + s1 + ' ; 字符串S2的值: ' + S2);
end;
procedure TForm4.Button2Click(Sender: TObject);
var
A1, A2: array of string;
begin
SetLength(A1, 1);
A1[0] := 'aaa';
A2 := A1;
A2[0] := 'bbb';
ShowMessage('数组A1的值:' + A1[0]+ ' ;数组A2的值:' + A2[0]);
end;
//初始化
procedure TForm4.Button3Click(Sender: TObject);
begin
SetEnum := [one, Two];
SetEnum1 := [Three, Nine, Ten]
end;
//集合减少
procedure TForm4.Button5Click(Sender: TObject);
begin
SetEnum := SetEnum - [Two];
end;
//集合增加
procedure TForm4.Button6Click(Sender: TObject);
begin
SetEnum := SetEnum + [Three];
end;
//集合减少
procedure TForm4.Button7Click(Sender: TObject);
begin
Exclude(SetEnum, One);
end;
//集合增加
procedure TForm4.Button4Click(Sender: TObject);
begin
Include(SetEnum, Four);
Include(SetEnum, Ten);
end;
//执行校验
procedure TForm4.Button8Click(Sender: TObject);
begin
if One in SetEnum then
begin
ShowMessage('Exclude函数执行失败');
end
else if Two in SetEnum then
begin
ShowMessage('SetEnum - [Two]执行失败');
end
else if not (Three in SetEnum) then
begin
ShowMessage('SetEnum + [Three]执行失败');
end
else if not (Four in SetEnum) then
begin
ShowMessage('Include函数执行失败');
end
else if not (ten in SetEnum) then
begin
ShowMessage('Include函数执行失败');
end
else
begin
ShowMessage('执行成功!');
end;
end;
//取得集合的交集
procedure TForm4.Button9Click(Sender: TObject);
begin
SetEnum2 := SetEnum1 * SetEnum;
if Three in SetEnum2 then
begin
ShowMessage('交集成功执行成功');
end;
end;
end.
———————————————————————————————————————
—————————————————————
———————————————————————————————————————
—————————————————————
object Form4: TForm4
Left = 359
Top = 186
Width = 558
Height = 418
Caption = 'Form4'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object GroupBox1: TGroupBox
Left = 24
Top = 16
Width = 209
Height = 145
Caption = '字符串和数组的的应用'
TabOrder = 0
object Button1: TButton
Left = 24
Top = 40
Width = 169
Height = 25
Caption = '字符串的引用'
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 24
Top = 88
Width = 169
Height = 25
Caption = '数组的引用'
TabOrder = 1
OnClick = Button2Click
end
end
object GroupBox2: TGroupBox
Left = 238
Top = 22
Width = 307
Height = 139
Caption = '集合的应用'
TabOrder = 1
object Button3: TButton
Left = 24
Top = 24
Width = 80
Height = 25
///////////////////////另一篇文章///////////
DELPHI集合类型
点击: 发布日期:2007-8-19 9:12:00 进入论坛
集合(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的所有元素组成)
Caption = '集合初始化'
TabOrder = 0
OnClick = Button3Click
end
object Button4: TButton
Left = 216
Top = 68
Width = 80
Height = 25
Caption = '集合增加2'
TabOrder = 1
OnClick = Button4Click
end
object Button5: TButton
Left = 112
Top = 28
Width = 80
Height = 25
Caption = '集合减少1'
TabOrder = 2
OnClick = Button5Click
end
object Button6: TButton
Left = 216
Top = 28
Width = 80
Height = 25
Caption = '集合增加1'
TabOrder = 3
OnClick = Button6Click
end
object Button7: TButton
Left = 112
Top = 68
Width = 80
Height = 25
Caption = '集合减少2'
TabOrder = 4
OnClick = Button7Click
end
object Button8: TButton
Left = 24
Top = 72
Width = 81
Height = 25
Caption = '检测集合值'
TabOrder = 5
OnClick = Button8Click
end
object Button9: TButton
Left = 120
Top = 104
Width = 81
Height = 25
Caption = '集合的交集'
TabOrder = 6
OnClick = Button9Click
end
end
end