当前位置:首页 > 天道酬勤 > 正文内容

delphi教学(delphi开发基础)

张世龙2021年12月20日 05:41天道酬勤440

公式说明

unitthatimplementsgenericcontainerclassestogroupdataitemsinarrays,dictionaries,lists,stacks,queues,and more,联合伙伴关系统。

示例:实现用于在数组中对数据项进行分组的通用容器类的单元。 词典、列表、堆栈、队列等。

一开始接触Delphi的时候,我觉得没有这部分的内容,一切都要自己实现。 请原谅我在这里的无知。

虽然从那个版本支持通用的东西,但是可能是没有找到和官方文档对应的说明,或者是我的英语太菜了,在官网上迷路了。

根据百度的结果,2007版本不支持2009 (真百度的)版本) )万一被老师的博客引用了也是这个版本)开始出现了。 也就是说,我认为支持通用容器的第一个版本是Delphi2009

说通用容器也无法避免的是通用的概念,以前看哔哩哔哩的网民的文章从通用的章节开始变得无知了。 其实不需要。 通用可以理解为变量,其值为具体类型

嗯,其实也可以认为是受伤的豌豆。 那个什么都有

Collections单元

在此单元中定义了总共13个容器类,其中包括线程队列。 那么,我们是熟悉所有班级还是需要学习? 答案是否定的

集装箱班以我个人的理解,其实有两大表现形式。 一个像列表形式的数组,另一个像Key、Value的配对形式。 也就是说,我们只要从中选择两个有代表性的班级进行学习就可以了。 接下来是我选的两个班

system.generics.collections.tlist :很明显这是列表system.generics.collections.tdictionary:dictionary这个单词翻译成了中文词典它是v的形式的代表注意事项:类似的类,如system.generics.collections.tobjectlistt和system.generics.collections.tlistt,在删除元素时会显示对象

API代码

对容器类的学习总原则是添加、删除、更改和调查这些核心的API功能。 其他东西只能现用调查。 我不知道别人写代码是什么习惯。 我写代码的时候,帮助文档基本上是打开的。

下面是两个容器类的代码实现

TList

实体类(TStudent )代码

类型

tstudent=类

私有的

名称:字符串

公共汽车

属性名称:字符串参考名称;

//制作方法

构造函数创建; 过载

//有参考结构方法

构造函数创建(名称:字符串; 过载

结束;

构造函数创建;

比根

结束;

constructortstudent.create (名称:字符串;

比根

Self.FName :=FName;

结束;

操作类(即添加、删除、更改、调查),我没有使用内联,所以想多次使用也删除了

美国航空

System.Generics.Collections,系统.系统;

var

//文档上的定义是TListT,我们定义的尖括号里的是TStudent,这是通用用法

StudentList: TListTStudent;

通过//循环获取TList成员

stu :双稳态;

比根

//初始化学生列表

sudent list :=tlisttstudent.create;

student list.add (tstudent .创建) hhDWD );

student list.add (tstudent.create ) )萩薗);

sudentlist.add(tstudent.create ('克洛) );

student list.add (tstudent.create )“留胡子的枕头”);

sudentlist.add(tstudent.create ('小黄');

//开始之前输出一次

for

Stu in StudentList do begin Writeln('学生信息是:' + Stu.Name); end; // 泛型容器自带的删除函数,偷个懒 StudentList.Delete(0); // 修改,查询到指定的学生,修改其值即可 StudentList.Items[0].Name := '留胡子的枕头'; // 查询,其实和数组的操作没有太大区别 for Stu in StudentList do begin Writeln('学生信息是:' + Stu.Name); end; end.

TDictionary

此类容器的特点是 key 唯一,并且几乎所有的操作都是根据 key 来的

改造下实体类(TStudent)增加一个属性,代码如下

type TStudent = class private FName: string; FId: string; public property Name: string read FName write FName; property Id: string read FId write FId; // 构造方法 constructor Create; overload; // 有参构造方法 constructor Create(FName: string; FId: string); overload; end; constructor TStudent.Create; begin end; constructor TStudent.Create(FName: string; FId: string); begin Self.FName := FName; end;

操作类(即增、删、改、查)

{注意单元的引用} uses System.Generics.Collections, System.SysUtils; var // 文档上的定义是TList<T>,而我们的定义尖括号中的是TStudent,这就是泛型的用法 StudentMap: TDictionary<string, TStudent>; // 循环中使用获取TList成员 Key: string; Student,Stu: TStudent; begin // 初始化学生列表 StudentMap := TDictionary<string, TStudent>.Create; // 此处的添加其实并不是太好,根据文档描述,当我们添加的元素的key已经存在会抛出异常 // 建议使用AddOrSetValue StudentMap.add('1001', TStudent.Create('1002', 'hhdwd')); StudentMap.add('1002', TStudent.Create('1001', '萧蔷')); StudentMap.add('1003', TStudent.Create('1003', '小黑')); StudentMap.add('1004', TStudent.Create('1004', '留胡子的枕头')); StudentMap.add('1005', TStudent.Create('1004', '小黄')); // 注意此处获取是key,也就是1001 1002这些东西 for Key in StudentMap.Keys do begin // 获取到key之后,再根据key获取对应value也就是学生对象 // 这里的获取方式有点儿任性居然要的是一个指针,而不是直接返回 StudentMap.TryGetValue(Key, Student); // 最好判断一下,否则容易出现空指针 if (Student <> nil) then Writeln('学生信息是:' + Student.Name) end; // 删除元素,无论什么操作都是通过key去操作,因为key是不可以重复的 StudentMap.Remove('1005'); // 修改,没有就添加,有就更新 StudentMap.AddOrSetValue('1004', TStudent.Create('1004', '小黄')); // 直接获取value for Stu in StudentMap.values do begin // 最好判断一下,否则容易出现空指针 if (Stu <> nil) then Writeln('学生信息是:' + Student.Name) end; end.

参考资料

万一的博客:https://www.cnblogs.com/del/category/113556.html

官方文档:http://docwiki.embarcadero.com/Libraries/Sydney/en/System.Generics.Collections

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/25417.html

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。