Delphi XE 泛型使用全集队 栈 字典 列表 对象列表Word格式.docx
- 文档编号:16846226
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:29
- 大小:22.78KB
Delphi XE 泛型使用全集队 栈 字典 列表 对象列表Word格式.docx
《Delphi XE 泛型使用全集队 栈 字典 列表 对象列表Word格式.docx》由会员分享,可在线阅读,更多相关《Delphi XE 泛型使用全集队 栈 字典 列表 对象列表Word格式.docx(29页珍藏版)》请在冰豆网上搜索。
'
forsinQueuedostr:
=str+s+'
'
ShowMessage(str);
{AAABBBCCCDDD}
{出列,并查看出列元素}
ShowMessage(Queue.Dequeue);
{AAA}
{BBBCCCDDD}
{查看下一个将要出列的是...}
ShowMessage(Queue.Peek);
{BBB}
Queue.Free;
//从TList<
T>
建立TQueue<
List:
=TList<
List.AddRange(['
AA'
'
BB'
CC'
]);
.Create(List);
{AABBCC}
ShowMessage(IntToStr(Queue.Count));
{3}
Queue.Clear;
{0}
//Queue.TrimExcess;
{TrimExcess方法在Queue好像没有存在的意义}
List.Free;
end;
详测GenericsCollectionsTQueue(3):
OnNotify、Extract
//usesGenerics.Collections;
{准备给TQueue.OnNotify调用的事件过程}
procedureTForm1.MyQueueNotify(Sender:
TObject;
constItem:
Integer;
Action:
TCollectionNotification);
caseActionof
cnAdded
:
ShowMessageFmt('
Add:
%d'
[Item]);
cnRemoved
Remove:
cnExtracted:
Extract:
end;
Integer>
Queue.OnNotify:
=MyQueueNotify;
Queue.Enqueue(11);
{Add:
11}
Queue.Enqueue(22);
22}
Queue.Enqueue(33);
33}
Queue.Dequeue;
{Remove:
//Extract和Dequeue功能一致,区别只是在驱动OnNotify事件时传递的参数有区别,没多大意义
Queue.Extract;
{Extract:
//Queue.OnNotify:
=nil;
详测GenericsCollectionsTStack
(1):
Push、Pop、Peek-其他功能同TQueue
Stack:
TStack<
Stack:
=TStack<
{压栈}
Stack.Push('
forsinStackdostr:
{AAABBBCCC}
{出栈:
后进的先出}
Stack.Pop;
{AAABBB}
{下一个将要出栈的...}
ShowMessage(Stack.Peek);
Stack.Free;
详测GenericsCollectionsTDictionary
(1):
Dictionary:
TDictionary<
string,Integer>
K:
V:
str:
b:
Boolean;
T:
ds:
.TPairEnumerator;
ks:
.TKeyEnumerator;
vs:
.TValueEnumerator;
Dictionary:
=TDictionary<
{添加}
Dictionary.Add('
n1'
111);
n2'
222);
n3'
333);
{访问}
ShowMessage(IntToStr(Dictionary['
]));
{222}
ShowMessage(IntToStr(Dictionary.Items['
{遍历Keys}
forKinDictionary.Keysdostr:
=str+K+'
{n2n3n1}//顺序乱了?
{遍历Values}
forVinDictionary.Valuesdostr:
=str+IntToStr(V)+'
{222333111}
{通过Keys遍历Values}
=str+IntToStr(Dictionary[K])+'
{222333111}
{删除}
Dictionary.Remove('
{222333}
{取数量、清空}
ShowMessage(IntToStr(Dictionary.Count));
{2}
Dictionary.Clear;
{0}
{判断指定的Key是否存在}
b:
=Dictionary.ContainsKey('
ShowMessage(BoolToStr(b,True));
{True}
n4'
{False}
{判断指定的Value是否存在}
=Dictionary.ContainsValue(111);
=Dictionary.ContainsValue(999);
{使用AddOrSetValue时,如果Key存在则替换值;
此时如果用Add将发生异常}
Dictionary.AddOrSetValue('
123);
{123}
{使用AddOrSetValue时,如果Key不存在则同Add}
444);
{444}
{尝试取值}
ifDictionary.TryGetValue('
T)then
ShowMessage(IntToStr(T));
ds:
=Dictionary.GetEnumerator;
whileds.MoveNextdoShowMessageFmt('
%s:
%d'
[ds.Current.Key,ds.Current.Value]);
{n2:
222
n3:
333
n1:
111}
ks:
=Dictionary.Keys.GetEnumerator;
whileks.MoveNextdoShowMessageFmt('
%s'
[ks.Current]);
{n2
n3
n1}
vs:
=Dictionary.Values.GetEnumerator;
whilevs.MoveNextdoShowMessageFmt('
[vs.Current]);
{222
333
111}
{ExtractPair应是提取元素,但它的返回值有些问题;
该函数源码有待修改}
Dictionary.ExtractPair('
Dictionary.Free;
详测GenericsCollectionsTDictionary(4):
OnKeyNotify、OnValueNotify
interface
uses
Generics.Collections;
implementation
procedureTForm1.KeyNotify(Sender:
Key_Add:
%s'
Key_Remove:
Key_Extract:
procedureTForm1.ValueNotify(Sender:
Value_Add:
Value_Remove:
Value_Extract:
Dictionary.OnKeyNotify:
=KeyNotify;
Dictionary.OnValueNotify:
=ValueNotify;
{Key_Add:
n1;
Value_Add:
111}
n2;
222}
{Value_Remove:
111;
123}
{Key_Remove:
Value_Remove:
{Key_Extract:
Value_Extract:
详测GenericsCollectionsTDictionary(5):
多种Create手段
usesGenerics.Collections,Generics.Defaults;
//Create可以指定元素数,这样可以提前分配空间以加快速度
.Create(3);
//Create可以有一个IEqualityComparer参数,用于判断Key怎样才是相同
procedureTForm1.Button2Click(Sender:
EqualityComparer:
IEqualityComparer<
{相等对比器}
{通过IEqualityComparer让TDictionary的Key忽略大小写}
EqualityComparer:
=TEqualityComparer<
.Construct(
function(constLeft,Right:
string):
Booleanbegin
Result:
=LowerCase(Left)=LowerCase(Right);
end,
function(constValue:
Integerbegin
=StrToIntDef(Value,0);
{我暂时不知道这个函数的作用,随便写的}
end
);
.Create(EqualityComparer);
{如果不是如上建立,下面这句将会产生一个新元素,而不是更新n1的值}
N1'
//Create可以同时指定上面两个参数
procedureTForm1.Button3Click(Sender:
.Create(9,EqualityComparer);
{指定元素数后,用不了的可以释放}
Dictionary.TrimExcess;
//可通过另一个TDictionary建立一个新的TDictionary
procedureTForm1.Button4Click(Sender:
Dictionary,DictionaryTmp:
pair:
TPair<
DictionaryTmp:
DictionaryTmp.Add('
{通过另一个TDictionary建立}
.Create(DictionaryTmp);
{遍历看看}
forpairinDictionarydoShowMessage(IntToStr(Dictionary[pair.Key]));
{222333111}
DictionaryTmp.Free;
//通过另一个TDictionary建立时,可同时再指定"
相等对比器"
procedureTForm1.Button5Click(Sender:
{再做个对比器}
=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Delphi XE 泛型使用全集队 字典 列表 对象列表 使用 全集 对象