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> 既然是泛型的, 那肯定应该容得下字符串列表, 本例就依此测试吧.
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 : = 0 to List.Count - 1 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( 0 , str);
Button1.Click;
end ;
{ 根据序号删除, 譬如删除第一个数据 }
procedure TForm1.Button4Click(Sender: TObject);
begin
List.RemoveAt( 0 );
Button1.Click;
end ;
{ 根据内容删除, 譬如删除第一个数据 }
procedure TForm1.Button5Click(Sender: TObject);
var
s: string ;
begin
s : = List[ 0 ];
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 = - 1 then
ShowMessage( ' 没找到 ' )
else
ShowMessageFmt( ' %s 是第 %d 个 ' , [str, n + 1 ]);
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 [ 0 .. 2 ] of string = ( ' CodeGear ' , ' Delphi ' , ' 2009 ' );
begin
List.Add( ' Embarcadero ' );
List.AddRange(arr);
Button1.Click;
end ;
end .
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 : = 0 to List.Count - 1 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( 0 , str);
Button1.Click;
end ;
{ 根据序号删除, 譬如删除第一个数据 }
procedure TForm1.Button4Click(Sender: TObject);
begin
List.RemoveAt( 0 );
Button1.Click;
end ;
{ 根据内容删除, 譬如删除第一个数据 }
procedure TForm1.Button5Click(Sender: TObject);
var
s: string ;
begin
s : = List[ 0 ];
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 = - 1 then
ShowMessage( ' 没找到 ' )
else
ShowMessageFmt( ' %s 是第 %d 个 ' , [str, n + 1 ]);
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 [ 0 .. 2 ] of string = ( ' CodeGear ' , ' Delphi ' , ' 2009 ' );
begin
List.Add( ' Embarcadero ' );
List.AddRange(arr);
Button1.Click;
end ;
end .
object
Form1: TForm1
Left = 0
Top = 0
Caption = ' Form1 '
ClientHeight = 201
ClientWidth = 349
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = - 11
Font.Name = ' Tahoma '
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Memo1: TMemo
Left = 0
Top = 0
Width = 121
Height = 201
Align = alLeft
Lines.Strings = (
' Memo1 ' )
ScrollBars = ssBoth
TabOrder = 0
ExplicitHeight = 206
end
object Button1: TButton
Left = 136
Top = 13
Width = 81
Height = 25
Caption = ' Button1 '
TabOrder = 1
OnClick = Button1Click
end
object Button2: TButton
Left = 127
Top = 44
Width = 100
Height = 25
Caption = ' Button2 '
TabOrder = 2
OnClick = Button2Click
end
object Button3: TButton
Left = 127
Top = 75
Width = 100
Height = 25
Caption = ' Button3 '
TabOrder = 3
OnClick = Button3Click
end
object Button4: TButton
Left = 127
Top = 106
Width = 100
Height = 25
Caption = ' Button4 '
TabOrder = 4
OnClick = Button4Click
end
object Button5: TButton
Left = 127
Top = 137
Width = 100
Height = 25
Caption = ' Button5 '
TabOrder = 5
OnClick = Button5Click
end
object Button6: TButton
Left = 240
Top = 44
Width = 100
Height = 25
Caption = ' Button6 '
TabOrder = 6
OnClick = Button6Click
end
object Button7: TButton
Left = 240
Top = 75
Width = 100
Height = 25
Caption = ' Button7 '
TabOrder = 7
OnClick = Button7Click
end
object Button8: TButton
Left = 240
Top = 106
Width = 100
Height = 25
Caption = ' Button8 '
TabOrder = 8
OnClick = Button8Click
end
object Button9: TButton
Left = 240
Top = 137
Width = 100
Height = 25
Caption = ' Button9 '
TabOrder = 9
OnClick = Button9Click
end
object Edit1: TEdit
Left = 240
Top = 15
Width = 100
Height = 21
TabOrder = 10
Text = ' Edit1 '
OnChange = Edit1Change
end
object Button10: TButton
Left = 127
Top = 168
Width = 214
Height = 25
Caption = ' Button10 '
TabOrder = 11
OnClick = Button10Click
end
end
Left = 0
Top = 0
Caption = ' Form1 '
ClientHeight = 201
ClientWidth = 349
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = - 11
Font.Name = ' Tahoma '
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Memo1: TMemo
Left = 0
Top = 0
Width = 121
Height = 201
Align = alLeft
Lines.Strings = (
' Memo1 ' )
ScrollBars = ssBoth
TabOrder = 0
ExplicitHeight = 206
end
object Button1: TButton
Left = 136
Top = 13
Width = 81
Height = 25
Caption = ' Button1 '
TabOrder = 1
OnClick = Button1Click
end
object Button2: TButton
Left = 127
Top = 44
Width = 100
Height = 25
Caption = ' Button2 '
TabOrder = 2
OnClick = Button2Click
end
object Button3: TButton
Left = 127
Top = 75
Width = 100
Height = 25
Caption = ' Button3 '
TabOrder = 3
OnClick = Button3Click
end
object Button4: TButton
Left = 127
Top = 106
Width = 100
Height = 25
Caption = ' Button4 '
TabOrder = 4
OnClick = Button4Click
end
object Button5: TButton
Left = 127
Top = 137
Width = 100
Height = 25
Caption = ' Button5 '
TabOrder = 5
OnClick = Button5Click
end
object Button6: TButton
Left = 240
Top = 44
Width = 100
Height = 25
Caption = ' Button6 '
TabOrder = 6
OnClick = Button6Click
end
object Button7: TButton
Left = 240
Top = 75
Width = 100
Height = 25
Caption = ' Button7 '
TabOrder = 7
OnClick = Button7Click
end
object Button8: TButton
Left = 240
Top = 106
Width = 100
Height = 25
Caption = ' Button8 '
TabOrder = 8
OnClick = Button8Click
end
object Button9: TButton
Left = 240
Top = 137
Width = 100
Height = 25
Caption = ' Button9 '
TabOrder = 9
OnClick = Button9Click
end
object Edit1: TEdit
Left = 240
Top = 15
Width = 100
Height = 21
TabOrder = 10
Text = ' Edit1 '
OnChange = Edit1Change
end
object Button10: TButton
Left = 127
Top = 168
Width = 214
Height = 25
Caption = ' Button10 '
TabOrder = 11
OnClick = Button10Click
end
end