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; ...
 
随机推荐
- C# 中 重载,重写,隐藏的区别
			
重载: 就是写多个同名方法,参数个数不同或类型不同或返回值不同 重写:子类中实现的方法必须加override关键词 普通非抽象父类需要virtual 抽象类里面抽象方法abstract 接口的实现 ...
 - Javac编译与JIT编译
			
本文转载自:http://blog.csdn.net/ns_code/article/details/18009455 编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的 ...
 - 面试经典——从输入 URL 到页面加载完的过程中都发生了什么事情?
			
想要更加了解http协议,猛戳这里 1)把URL分割成几个部分:协议.网络地址.资源路径.其中网络地址指示该连接网络上哪一台计算机,可以是域名或者IP地址,可以包括端口号:协议是从该计算机获取资源的方 ...
 - Mysq 5.7l服务无法启动,没有报告任何错误
			
昨天系统崩溃了,然后重装了Mysql 5.7 安装步骤和遇到问题及解决方案. 去官网下载Mysql 5.7的解压包(zip),解压到你要安装的目录. 我的安装目录是:D:\Java\Mysql 安装步 ...
 - Abstraction elimination
			
(本文不保证不误人子弟,切勿轻信) Unlambda指的是lambda计算中去掉lambda操作(does not have lambda(or abstraction) operation of t ...
 - [Q]复制授权了文件但仍显示“未注册”问题(安装在非默认目录或目录包含中文)
			
1. 注意要将解压后的文件复制到CAD批量打图精灵安装目录,而不要复制文件夹,复制是提示是否需要覆盖,要选择覆盖. 2. 若通过第1步操作仍然显示“未注册”,则可能是由于安装目录含有中文或者不是默认目 ...
 - git 克隆到本地linux目录的2种方式
			
登录到gitlab查看2种不同的地址 ssh 类型 地址 git@inc.xxxx:shiwf/xxxAdmin.git http类型 地址 http://inc.xxxx:8000/shiwf/xx ...
 - Python基础(十)-模块
			
模块初识 一般把不同功能代码放到不同py文件,一个py文件就是一个模块 三种模块库: 1.Python标准库 2.第三方库 3.自定义库 导入模块:import 库名 (Python解释器只认识执行文 ...
 - Multi-Objective Data Placement for Multi-Cloud Socially Aware Services---INFOCOM 2014
			
[标题] [作者] [来源] [对本文评价] [why] 存在的问题 [how] [不足] assumption in future work [相关方法或论文] [重点提示] [其它]
 - VMware安装Centos6.8设置ip无法远程连接问题
			
今天使用VMware安装Centos6.8minimal版本再设置ip地址的时候遇到了一些麻烦,就是无法ping通Centos操作系统的配置的ip从而无法用Xshell远程连接上. 如何配置请看下面的 ...