Delphi 2009 泛型容器单元(Generics.Collections)[1]: TList


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

本例效果图:

Delphi 2009 泛型容器单元(Generics.Collections)[1]: 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.


 
   
窗体文件:

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


 
   

你可能感兴趣的:(Collections)