总结目前 TMyList 已具备的功能(3 个方法、3 个属性):
Add: 添加;
Delete: 删除;
Clear: 清空;
Count: 元素总数;
Capacity: 已存在的所有元素位置数;
List: 指向核心数组的指针(只读).
举例测试如下:
理解一下:
ListA.List 是那个核心数组的指针, 要表示那个数组应该用: ListA.List^
数组的第二个元素 ListA.List^[2], 又是指向元素的指针, 获取元素应该用: ListA.List^[2]^
还有转换成可以识别的对象: TMyRec(ListA.List^[2]^);
应尽早添加 TMyRec.Items[i] 数组属性来访问元素, 不然麻烦透了!
Add: 添加;
Delete: 删除;
Clear: 清空;
Count: 元素总数;
Capacity: 已存在的所有元素位置数;
List: 指向核心数组的指针(只读).
举例测试如下:
从上面的例子可以看出, 现在要访问一个元素真不容易: r := TMyRec(ListA.List^[2]^);unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses MyList; {uses TMyList 所在单元} type TMyRec = record {定义结构; 用于填充测试} name: string[8]; age : Word; end; procedure TForm1.FormCreate(Sender: TObject); var ListA: TMyList; r,r1,r2,r3,r4,r5: TMyRec; begin ListA := TMyList.Create; {建立之初, Count 与 Capacity 两个属性都应该是 0; 测试:} ShowMessageFmt('%d,%d',[ListA.Count,ListA.Capacity]); {0,0} {添加一个元素(指针)} r1.name := '张三'; r1.age := 11; ListA.Add(@r1); {现在 Count 应该是 1, Capacity 应该是 4; 测试:} ShowMessageFmt('%d,%d',[ListA.Count,ListA.Capacity]); {1,4} {继续添加} r2.name := '李四'; r2.age := 22; ListA.Add(@r2); r3.name := '王五'; r3.age := 33; ListA.Add(@r3); r4.name := '孙六'; r4.age := 44; ListA.Add(@r4); r5.name := '候七'; r5.age := 55; ListA.Add(@r5); {现在 Count 应该是 5, Capacity 应该是 8; 测试:} ShowMessageFmt('%d,%d',[ListA.Count,ListA.Capacity]); {5,8} {用 TMyList 的 List 属性获取第三个元素} r := TMyRec(ListA.List^[2]^); ShowMessageFmt('%s:%d',[r.name, r.age]); {王五:33} {删除第三个元素后再访问第三个元素} ListA.Delete(2); r := TMyRec(ListA.List^[2]^); ShowMessageFmt('%s:%d',[r.name, r.age]); {孙六:44} {执行 Clear 方法后, Count 和 Capacity 应该清 0} ListA.Clear; ShowMessageFmt('%d,%d',[ListA.Count,ListA.Capacity]); {0,0} ListA.Free; end; end.
理解一下:
ListA.List 是那个核心数组的指针, 要表示那个数组应该用: ListA.List^
数组的第二个元素 ListA.List^[2], 又是指向元素的指针, 获取元素应该用: ListA.List^[2]^
还有转换成可以识别的对象: TMyRec(ListA.List^[2]^);
应尽早添加 TMyRec.Items[i] 数组属性来访问元素, 不然麻烦透了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧