delphi 集合的用法
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
delphi 集合的用法的更多相关文章
- Delphi集合的用法
参考:http://www.cnblogs.com/doit8791/archive/2012/08/17/2644859.html 集合是Pascal特有的数据类型,在Visual Basic.C/ ...
- (转载)Delphi TStringList的用法
Delphi TStringList的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. TStringList 常用方法与属性: var List: TStringL ...
- Delphi TStringList的用法
Delphi TStringList的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. TStringList 常用方法与属性: var List: TStringL ...
- delphi FillChar的用法(转)
delphi FillChar的用法(转) (2012-12-24 15:12:06) 转载▼ 标签: it 分类: delphi7 FillChar的用法(delphi) Fillchar是Turb ...
- Delphi Inputbox,InputQuery用法
Delphi :InputQuery,InputBox用法及区别 function InputQuery(const ACaption, APrompt: string; var Value: str ...
- Delphi XE4 TStringHelper用法详解
原文地址:Delphi XE4 TStringHelper用法详解作者:天下为公 Delphi XE4的TStringHelper,对操作字符串进一步带来更多的方法,估计XE5还能继续用到. Syst ...
- Delphi常用关键字用法详解
本文详细介绍了Delphi中常用的各个关键字名称及用法,供大家在编程过程中借鉴参考之用.详情如下: absolute: ? 1 2 3 4 5 6 7 8 9 10 //它使得你能够创建一个新变量, ...
- Delphi中Messagedlg用法
if MessageDlg('Welcome to my Delphi application. Exit now?', mtConfirmation, [mbYes, mbNo], 0) = mrY ...
- 关于comparable与comparator的用法(即自定义集合框架用法 )
package javastudy; import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; ...
随机推荐
- 开源的许可证GPL、LGPL、BSD、Apache 2.0的通俗解释
软件开发者要开源软件,不单单是开放源代码就可以了,选择一种许可证很重要,一个许可证之于软件就相当于价值观之于普通人,代表了这个软件的基本品性.一个错误的许可证选择可能会直接导致整个项目的失败. 各种开 ...
- java的三种构造器
重叠构造器:不可取: javabeans模式:不可取: Builder模式:可取.
- wpf 界面线程 添加项
foreach (var r in sec.Records) { listView.Dispatcher.Invoke((new Action(delegate() { listView.Items. ...
- 微信小程序使用场景及取名“潜”规则
微信小程序使用场景举例: 1.查看公交 2.登记.选座 3.订票 4.K歌.叫代驾 5.快递查询 6.查看天气 7.医院挂号.拿药.缴费 8.加油充电 9.政务服务 微信公众号“数据三观”认为,小程序 ...
- Kostya the Sculptor
Kostya the Sculptor 题目链接:http://codeforces.com/problemset/problem/733/D 贪心 以次小边为第一关键字,最大边为第二关键字,最小边为 ...
- 整理一些css在使用中的小技巧(进行中)
1. 消除li排列display:inline-block的间隙 ul{ font-size:; } ul li{ display:inline-block; }
- RSA算法记录----摘抄
RSA算法原理(一) "公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果. 进入正题之前,我先简单介绍一下,什么 ...
- 《C++反汇编与逆向分析技术揭秘》——基本数据类型的表现形式
---恢复内容开始--- 基本的浮点数指令 示例代码: Visual Studio 2013的反汇编代码是: 对于movss,表示移动标量单精度浮点值 将标量单精度浮点值从源操作数(第二个操作数)移到 ...
- js得到当前页面的url信息方法
js得到当前页面的url信息方法:http://www.cnblogs.com/zuosong160522/p/5755615.html js获取url传递参数,js获取url?后面的参数:http: ...
- Spring Security(18)——Jsp标签
目录 1.1 authorize 1.2 authentication 1.3 accesscontrollist Spring Security也有对Jsp标签的支持的标签库 ...