zoukankan      html  css  js  c++  java
  • 第33周星期五小结及Delphi集合用法

    今天上午主要是提交代码审核,调试代码中bug,后来现场又反映问题,遇到delphi集合处理问题,调试解决到下午3点半,然后是下载相关方案文档,查询学习相关知识,晚上江南体育中心第30次游泳,大概3KM左右,动作不标准,随意游的。现在总结今天新遇到的几个问题。

    Delphi中的BoolToStr,把Boolean变量转换为字符串

    //以前不知道 BoolToStr 还有一个默认参数

    procedure TForm1.Button1Click(Sender: TObject);

    var

    b: Boolean;

    s: string;

    begin

    b := True;

    s := BoolToStr(b);

    ShowMessage(s); {-1}

    b := False;

    s := BoolToStr(b);

    ShowMessage(s); {0}

    b := True;

    s := BoolToStr(b, True);

    ShowMessage(s); {True}

    b := False;

    s := BoolToStr(b, True);

    ShowMessage(s); {False}

    end;

    Delphi——集合的使用

    集合是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.直接在所在过程中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;

    二、集合的值

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

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

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

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

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

    6、每个元素可用基类型所允许的表达式来表示。如 [1,1+2,4]、[succ(ch)]。

    三、集合的运算

    集合类型变量不能进行算术运算,集合是无序的,不能使用ord、pred、succ等函数。

    1、赋值运算

    只能通过赋值语句给集合变量赋值,不能通过读语句赋值,也不能通过写语句直接输出集合变量的值。如:

    集合变量赋值: c:=['2']; i:=[5]; w:=[];

    集合变量赋子界值: c:=['a'..'z']; i:=[1..7];

    集合变量赋枚举值: c:=['a','b','d','m']; i:=[2,4,6,8,10];

    2、集合的并、交、差运算

      可以对集合进行并(+)、交(*)、差 (-)三种运算,每种运算只有一个运算符、两个运算对象,运算结果仍为集合。注意它们与算术运算的区别。

    ① 并运算 (关系代数运算符∪)

    A,B为两个集合,由集合A中的元素加上集合B中的与A不重复的所有元素组成的集合,称为集合A和B的并。即A+B,如:

    [X,Y,Z]+[X] 为 [X,Y,Z] { 两个集合中不重复的所有元素 }

    [1]+[4] 为[1,4]

    用+、-运算符或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是集合的按位的长度)条机器指令。

    ② 交运算 (关系代数运算符∩)

    A,B为两个集合,由既属于集合A中的元素又属于集合B中的所有元素组成的集合,称为集合A和B的交。即A*B,如:

    [X,Y,Z]*[X] 为 [X] { 两个集合中的相同元素 }

    [X,Y,Z]* 为 []

    ③差运算 (关系代数运算符-)

    A,B为两个集合,由集合A中的元素除去集合B中与A相同的元素组成的集合,称为集合A和B的差。即AB,如:

    [X,Y,Z]-[X] 为 [Y,Z ] { 在集合A中又不在集合B中的所有元素 }

    [X,Y,Z]- 为 [X,Y,Z]

    3、集合的关系运算: 运算结果为布尔值

    关系运算符: = 相等、<> 不相等、

    >= 包含,表示前者蕴含后者,相当于集合论中的 FORMULAS>[img]mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\pascal入门.CHM::/setof.1.gif[/img]。

    <= 包含于,表示前者蕴含于后者,相当于集合论中的 [img]mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\pascal入门.CHM::/setof.2.gif[/img]。

    例如:[a,b,c]=[b,c,a] 为true,元素个数相同,内容相同,不管排列顺序如何。 [a,b,c]>=[a] 为true;[a,b]<=[a,b,c] 为true。

    in运算:in的右边为集合,左边为与集合基类型相同的表达式,为布尔值。in测试一个元素是否在集合中。相当于集合论中的∈。它们都是二目运算,且前4个运算符的运算对象都是相容的集合类型。例如:a in[b,c] 为false。

    CharSet中是否有字母'S':

    if 'S' in CharSet then

    / /继续运行

    下面的代码判断在EnumSet中是否没有Monday :

    if not (Monday in EnumSet) then

    / /继续运行

    设集合a:=[1..10]; x 为integer,如x在集合a中即删除a中的元素x,否则把元素x添加到集合a中。程序段如下: if x in a then a:=a-[x] else a:=a+[x]

    集合没有的直接运算:集合中元素的个数以及打印输出集合中每个元素。

  • 相关阅读:
    1.Angular的架构模型
    最受欢迎的14款主流渗透工具,流行至今
    当今破解密码涉及的思路方法总结
    Windows权限提升基础知识和命令
    同形异义字:看我如何拿到TaoBao.com的解析权
    【浅谈web安全】大企业安全:从员工下手
    PHPcms9.6.0任意文件上传漏洞直接getshell 利用教程
    【MD5解密】免费帮大家解MD5
    【社会工程学】打脸社工所谓的社工六人组社工帝
    震惊!WIN2003存在后门大全,提权成功率高
  • 原文地址:https://www.cnblogs.com/doit8791/p/2644859.html
Copyright © 2011-2022 走看看