Delphi 2009 泛型容器单元(Generics.Collections)[1]: TList<T>
Delphi 2009 新增了泛型容器单元: Generics.Collections, 同时还有一个 Generics.Defaults 单元做支持.
Generics.Collections 包含了以下实用类:
TList<T>
TQueue<T>
TStack<T>
TDictionary<TKey,TValue>
TObjectList<T>
TObjectQueue<T>
TObjectStack<T>
TObjectDictionary<TKey,TValue>
有了以上泛型的容器, 恐怕 Classes.TList 和 Contnrs 单元下的 TObjectList 等系列容器也就只为兼容存在了.
Generics.Collections.TList<T> 既然是泛型的, 那肯定应该容得下字符串列表, 本例就依此测试吧.
如果你对泛型不了解, 应先看看: http://www.cnblogs.com/del/archive/2008/08/14/1268258.html
本例效果图:
代码文件:
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
- type
- TForm1 = class(TForm)
- Memo1: TMemo;
- Edit1: TEdit;
- Button1: TButton;
- Button2: TButton;
- Button3: TButton;
- Button4: TButton;
- Button5: TButton;
- Button6: TButton;
- Button7: TButton;
- Button8: TButton;
- Button9: TButton;
- Button10: TButton;
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure Edit1Change(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure Button4Click(Sender: TObject);
- procedure Button5Click(Sender: TObject);
- procedure Button6Click(Sender: TObject);
- procedure Button7Click(Sender: TObject);
- procedure Button8Click(Sender: TObject);
- procedure Button9Click(Sender: TObject);
- procedure Button10Click(Sender: TObject);
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- uses Generics.Collections; {Delphi 2009 新增的泛型容器单元}
- var
- List: TList<string>; {定义一个泛型 TList 类, 这指定了要用于 string}
- str: string = 'Test';
- {建立}
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- List := TList<string>.Create;
- Memo1.Clear;
- Edit1.Text := str;
- Button1.Caption := Button1.Caption + ' 显示';
- Button2.Caption := Button2.Caption + ' 添加';
- Button3.Caption := Button3.Caption + ' 插入';
- Button4.Caption := Button4.Caption + ' 删除1';
- Button5.Caption := Button5.Caption + ' 删除2';
- Button6.Caption := Button6.Caption + ' 查找';
- Button7.Caption := Button7.Caption + ' 排序';
- Button8.Caption := Button8.Caption + ' 翻转';
- Button9.Caption := Button9.Caption + ' 清空';
- Button10.Caption := Button10.Caption + ' 添加数组';
- end;
- {释放}
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- List.Free;
- end;
- procedure TForm1.Edit1Change(Sender: TObject);
- begin
- if Edit1.Text <> '' then str := Edit1.Text;
- end;
- {显示}
- procedure TForm1.Button1Click(Sender: TObject);
- var
- i: Integer;
- begin
- Memo1.Clear;
- for i := to List.Count - do
- Memo1.Lines.Add(List[i]); {List[i] = List.Item[i]}
- Text := Format('当前总数: %d', [List.Count]);
- end;
- {添加}
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- List.Add(str);
- Button1.Click; {刷新显示}
- end;
- {插入, 譬如插入在最前面}
- procedure TForm1.Button3Click(Sender: TObject);
- begin
- List.Insert(, str);
- Button1.Click;
- end;
- {根据序号删除, 譬如删除第一个数据}
- procedure TForm1.Button4Click(Sender: TObject);
- begin
- List.RemoveAt();
- Button1.Click;
- end;
- {根据内容删除, 譬如删除第一个数据}
- procedure TForm1.Button5Click(Sender: TObject);
- var
- s: string;
- begin
- s := List[];
- List.Remove(s);
- Button1.Click;
- end;
- {查找}
- procedure TForm1.Button6Click(Sender: TObject);
- var
- n: Integer;
- begin
- n := List.IndexOf(str); {LastIndexOf 是从后面找; 也可用 List.Contains(str) 判断是否包含 str}
- if n = - then
- ShowMessage('没找到')
- else
- ShowMessageFmt('%s 是第 %d 个', [str, n+]);
- end;
- {排序}
- procedure TForm1.Button7Click(Sender: TObject);
- begin
- List.Sort;
- Button1.Click;
- end;
- {翻转}
- procedure TForm1.Button8Click(Sender: TObject);
- begin
- List.Reverse;
- Button1.Click;
- end;
- {清空}
- procedure TForm1.Button9Click(Sender: TObject);
- begin
- List.Clear;
- Button1.Click;
- end;
- {添加数组}
- procedure TForm1.Button10Click(Sender: TObject);
- const
- arr: array[..] of string = ('CodeGear', 'Delphi', '2009');
- begin
- List.Add('Embarcadero');
- List.AddRange(arr);
- Button1.Click;
- end;
- end.
窗体文件:
- object Form1: TForm1
- Left =
- Top =
- Caption = 'Form1'
- ClientHeight =
- ClientWidth =
- Color = clBtnFace
- Font.Charset = DEFAULT_CHARSET
- Font.Color = clWindowText
- Font.Height = -
- Font.Name = 'Tahoma'
- Font.Style = []
- OldCreateOrder = False
- OnCreate = FormCreate
- OnDestroy = FormDestroy
- PixelsPerInch =
- TextHeight =
- object Memo1: TMemo
- Left =
- Top =
- Width =
- Height =
- Align = alLeft
- Lines.Strings = (
- 'Memo1')
- ScrollBars = ssBoth
- TabOrder =
- ExplicitHeight =
- end
- object Button1: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button1'
- TabOrder =
- OnClick = Button1Click
- end
- object Button2: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button2'
- TabOrder =
- OnClick = Button2Click
- end
- object Button3: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button3'
- TabOrder =
- OnClick = Button3Click
- end
- object Button4: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button4'
- TabOrder =
- OnClick = Button4Click
- end
- object Button5: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button5'
- TabOrder =
- OnClick = Button5Click
- end
- object Button6: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button6'
- TabOrder =
- OnClick = Button6Click
- end
- object Button7: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button7'
- TabOrder =
- OnClick = Button7Click
- end
- object Button8: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button8'
- TabOrder =
- OnClick = Button8Click
- end
- object Button9: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button9'
- TabOrder =
- OnClick = Button9Click
- end
- object Edit1: TEdit
- Left =
- Top =
- Width =
- Height =
- TabOrder =
- Text = 'Edit1'
- OnChange = Edit1Change
- end
- object Button10: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button10'
- TabOrder =
- OnClick = Button10Click
- end
- end
Delphi 2009 泛型容器单元(Generics.Collections)[1]: TList<T>的更多相关文章
- 泛型容器单元(Generics.Collections)[3]: TStack<T> 堆栈列表
TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出. TStack 主要有三个方法.一个属性:Push(压栈).Pop(出栈).Peek(查看下一个 ...
- 泛型容器单元(Generics.Collections)[2]: TQueue<T> 队列列表
TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出. TQueue 主要有三个方法.一个属性:Enqueue(入列).Dequeue(出列).Pee ...
- 谈一谈从 Delphi 2009 之后就支援的重要功能 – 泛型 (Generic)
前言 在C++的语言基础当中,除了物件导向.事件驱动的概念之外,模版设计(Template)也是非常重要的一环.然而,C++的开发人员能够善用模版设计的并不多.模版设计这个好物,一般还有一个名称,就是 ...
- Delphi 7以来的Delphi 2009测试版新语法特性
我晕,Delphi 7 以后增加了这么多有用的语法,我都不知道.真是越学越觉得自己浅薄,自己所作的Delphi项目所用的知识还不够Delphi知识储备体系的十分之一,更别说Delphi还在继续发展. ...
- C#中泛型容器Stack<T>
我以前都是学出c,c++,这个学期开始学c#有点不适应,在编程中遇到些问题,所以自己在网上查了些资料,翻了一下书,写一些总结. 关于c#中Stack<T>泛型容器: <1>st ...
- Delphi 对泛型TList的的改进(TSimpleList)
TList 有一个比较麻烦的问题是,到底由谁来释放List中的对象或指针. 本例将释放任务教给 TSimpleList ,方便使用. 如果 TList 为于管理对象,还可以实现 AddNewOne 功 ...
- 从头认识java-13.11 对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题?
这一章节我们继续类型擦除的话题,我们将通过对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题? 1.数组 package com.ray.ch13; public class Test { pub ...
- delphi 需要应用一个单元是,需要在工程里面先添加单元
delphi 需要应用一个单元是,需要在工程里面先添加单元
- delphi基础篇之单元文件
Delphi单元文件 unit MainFrm; {库单元文件头} interface {接口部分由Interface开始implementation结束.声明引用的单元,常量,数据类型 ...
随机推荐
- 【CCL】连通区域提取
根据朋友给的一份原理写的 感觉还挺清楚 #include "cv.h" #include "highgui.h" #include <stdio.h> ...
- 【python升级录】--列表,元组
本节内容 字符串格式化输出 数据运算 for循环 while循环 列表 元组 [字符串格式化输出] 占位符 %s—string,%d—digital,%f —float # __author:&quo ...
- .Net的DataGrid的使用
先上图吧
- asp.net Excel数据导入到数据库中
protected void Btn_Import_Click(object sender, EventArgs e) { bool Result_Import = false; bool Resul ...
- 一个.xib界面文件中设计有多个View
一个新建的.xib文件(Xcode's Interface Builder),有一个默认的View,也就是self.view,是主视图 其他新建的View可以在viewDidLoad()函数中使用 [ ...
- July 5th, Week 28th Tuesday, 2016
If you smile when no one else is around, you really mean it. 独处的时候你的笑容才是发自内心的笑容. Human beings are so ...
- linux初体验
linux系统和window一样,也是一套独立的操作系统,它只是没有图形化界面而已
- 模拟赛1031d1
NP(np)Time Limit:1000ms Memory Limit:64MB题目描述LYK 喜欢研究一些比较困难的问题,比如 np 问题.这次它又遇到一个棘手的 np 问题.问题是这个样子的:有 ...
- zipArchive
ZipArchive *unZip = [[ZipArchive alloc]init]; if ([unZip unzipOpenFile:savePath]) { BOOL ret = [unZi ...
- android viewPager 切换页面时防止fragment重新加载
把限制页面数设置成应用一共的页面数就可以了 ViewPager.setOffscreenPageLimit(3);