ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:22.78KB ,
资源ID:3939286      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3939286.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Delphi XE 泛型使用全集队 栈 字典 列表 对象列表.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Delphi XE 泛型使用全集队 栈 字典 列表 对象列表.docx

1、Delphi XE 泛型使用全集队 栈 字典 列表 对象列表详测 Generics Collections TQueueuses Generics.Collections;procedure TForm1.Button1Click(Sender: TObject);var Queue: TQueue; s,str: string; List: TList;begin Queue := TQueue.Create(); 入列 Queue.Enqueue(AAA); Queue.Enqueue(BBB); Queue.Enqueue(CCC); Queue.Enqueue(DDD); 查看 str

2、 := ; for s in Queue do str := str + s + ; ShowMessage(str); AAA BBB CCC DDD 出列, 并查看出列元素 ShowMessage(Queue.Dequeue); AAA str := ; for s in Queue do str := str + s + ; ShowMessage(str); BBB CCC DDD 查看下一个将要出列的是. ShowMessage(Queue.Peek); BBB Queue.Free;/从 TList 建立 TQueue List := TList.Create(); List.Ad

3、dRange(AA, BB, CC); Queue := TQueue.Create(List); str := ; for s in Queue do str := str + s + ; ShowMessage(str); AA BB CC ShowMessage(IntToStr(Queue.Count); 3 Queue.Clear; ShowMessage(IntToStr(Queue.Count); 0 /Queue.TrimExcess; TrimExcess 方法在 Queue 好像没有存在的意义 List.Free; Queue.Free;end;详测 Generics Co

4、llections TQueue (3): OnNotify、Extract/uses Generics.Collections;准备给 TQueue.OnNotify 调用的事件过程procedure TForm1.MyQueueNotify(Sender: TObject; const Item: Integer; Action: TCollectionNotification);begin case Action of cnAdded : ShowMessageFmt(Add: %d, Item); cnRemoved : ShowMessageFmt(Remove: %d, Item)

5、; cnExtracted : ShowMessageFmt(Extract: %d, Item); end;end;procedure TForm1.Button1Click(Sender: TObject);var Queue: TQueue;begin Queue := TQueue.Create(); Queue.OnNotify := MyQueueNotify; Queue.Enqueue(11); Add: 11 Queue.Enqueue(22); Add: 22 Queue.Enqueue(33); Add: 33 Queue.Dequeue; Remove: 11 / Ex

6、tract 和 Dequeue 功能一致, 区别只是在驱动 OnNotify 事件时传递的参数有区别, 没多大意义 Queue.Extract; Extract: 22 /Queue.OnNotify := nil; Queue.Free; Remove: 33end;详测 Generics Collections TStack(1): Push、Pop、Peek - 其他功能同 TQueueuses Generics.Collections;procedure TForm1.Button1Click(Sender: TObject);var Stack: TStack; s,str: str

7、ing;begin Stack := TStack.Create(); 压栈 Stack.Push(AAA); Stack.Push(BBB); Stack.Push(CCC); str := ; for s in Stack do str := str + s + ; ShowMessage(str); AAA BBB CCC 出栈: 后进的先出 Stack.Pop; str := ; for s in Stack do str := str + s + ; ShowMessage(str); AAA BBB 下一个将要出栈的. ShowMessage(Stack.Peek); BBB St

8、ack.Free;end;详测 Generics Collections TDictionary(1):uses Generics.Collections;procedure TForm1.Button1Click(Sender: TObject);var Dictionary: TDictionary; K: string; V: Integer; str: string; b: Boolean; T: Integer; ds: TDictionary.TPairEnumerator; ks: TDictionary.TKeyEnumerator; vs: TDictionary.TValu

9、eEnumerator;begin Dictionary := TDictionary.Create(); 添加 Dictionary.Add(n1, 111); Dictionary.Add(n2, 222); Dictionary.Add(n3, 333); 访问 ShowMessage(IntToStr(Dictionaryn2); 222 ShowMessage(IntToStr(Dictionary.Itemsn2); 222 遍历 Keys str := ; for K in Dictionary.Keys do str := str + K + ; ShowMessage(str

10、); n2 n3 n1 /顺序乱了? 遍历 Values str := ; for V in Dictionary.Values do str := str + IntToStr(V) + ; ShowMessage(str); 222 333 111 通过 Keys 遍历 Values str := ; for K in Dictionary.Keys do str := str + IntToStr(DictionaryK) + ; ShowMessage(str); 222 333 111 删除 Dictionary.Remove(n1); str := ; for K in Dicti

11、onary.Keys do str := str + IntToStr(DictionaryK) + ; ShowMessage(str); 222 333 取数量、清空 ShowMessage(IntToStr(Dictionary.Count); 2 Dictionary.Clear; ShowMessage(IntToStr(Dictionary.Count); 0 判断指定的 Key 是否存在 b := Dictionary.ContainsKey(n1); ShowMessage(BoolToStr(b, True); True b := Dictionary.ContainsKey

12、(n4); ShowMessage(BoolToStr(b, True); False 判断指定的 Value 是否存在 b := Dictionary.ContainsValue(111); ShowMessage(BoolToStr(b, True); True b := Dictionary.ContainsValue(999); ShowMessage(BoolToStr(b, True); False 使用 AddOrSetValue 时, 如果 Key 存在则替换值; 此时如果用 Add 将发生异常 Dictionary.AddOrSetValue(n1, 123); ShowMe

13、ssage(IntToStr(Dictionaryn1); 123 使用 AddOrSetValue 时, 如果 Key 不存在则同 Add Dictionary.AddOrSetValue(n4, 444); ShowMessage(IntToStr(Dictionaryn4); 444 尝试取值 if Dictionary.TryGetValue(n2, T) thenShowMessage(IntToStr(T); 222 ds := Dictionary.GetEnumerator; while ds.MoveNext do ShowMessageFmt(%s:%d, ds.Curre

14、nt.Key, ds.Current.Value); n2:222 n3:333 n1:111 ks := Dictionary.Keys.GetEnumerator; while ks.MoveNext do ShowMessageFmt(%s, ks.Current); n2 n3 n1 vs := Dictionary.Values.GetEnumerator; while vs.MoveNext do ShowMessageFmt(%d, vs.Current); 222 333 111 ExtractPair 应是提取元素, 但它的返回值有些问题; 该函数源码有待修改 Diction

15、ary.ExtractPair(n1); ShowMessage(IntToStr(Dictionary.Count); 2 Dictionary.Free;end;详测 Generics Collections TDictionary(4): OnKeyNotify、OnValueNotifyinterfaceuses Generics.Collections;implementationprocedure TForm1.KeyNotify(Sender: TObject; const Item: string; Action: TCollectionNotification);begin

16、case Action of cnAdded : ShowMessageFmt(Key_Add: %s, Item); cnRemoved : ShowMessageFmt(Key_Remove: %s, Item); cnExtracted : ShowMessageFmt(Key_Extract: %s, Item); end;end;procedure TForm1.ValueNotify(Sender: TObject; const Item: Integer; Action: TCollectionNotification);begin case Action of cnAdded

17、: ShowMessageFmt(Value_Add: %d, Item); cnRemoved : ShowMessageFmt(Value_Remove: %d, Item); cnExtracted : ShowMessageFmt(Value_Extract: %d, Item); end;end; procedure TForm1.Button1Click(Sender: TObject);var Dictionary: TDictionary;begin Dictionary := TDictionary.Create(); Dictionary.OnKeyNotify := Ke

18、yNotify; Dictionary.OnValueNotify := ValueNotify; Dictionary.Add(n1, 111); Key_Add: n1; Value_Add: 111 Dictionary.Add(n2, 222); Key_Add: n2; Value_Add: 222 Dictionary.AddOrSetValue(n1, 123); Value_Remove: 111; Value_Add: 123 Dictionary.Remove(n1); Key_Remove: n1; Value_Remove: 111 Dictionary.Extract

19、Pair(n2); Key_Extract: n2; Value_Extract: 222 Dictionary.OnKeyNotify := nil; Dictionary.OnValueNotify := nil; Dictionary.Free;end;详测 Generics Collections TDictionary(5): 多种 Create 手段uses Generics.Collections, Generics.Defaults;/Create 可以指定元素数, 这样可以提前分配空间以加快速度procedure TForm1.Button1Click(Sender: TOb

20、ject);var Dictionary: TDictionary;begin Dictionary := TDictionary.Create(3); Dictionary.Add(n1, 111); Dictionary.Add(n2, 222); Dictionary.Add(n3, 333); Dictionary.Free;end;/Create 可以有一个 IEqualityComparer 参数, 用于判断 Key 怎样才是相同procedure TForm1.Button2Click(Sender: TObject);var Dictionary: TDictionary; E

21、qualityComparer: IEqualityComparer; 相等对比器begin 通过 IEqualityComparer 让 TDictionary 的 Key 忽略大小写 EqualityComparer := TEqualityComparer.Construct( function(const Left, Right: string): Boolean begin Result := LowerCase(Left) = LowerCase(Right); end, function(const Value: string): Integer begin Result :=

22、StrToIntDef(Value, 0); 我暂时不知道这个函数的作用, 随便写的 end ); Dictionary := TDictionary.Create(EqualityComparer); Dictionary.Add(n1, 111); Dictionary.Add(n2, 222); Dictionary.Add(n3, 333); 如果不是如上建立, 下面这句将会产生一个新元素, 而不是更新 n1 的值 Dictionary.AddOrSetValue(N1, 123); ShowMessage(IntToStr(Dictionaryn1); 123 Dictionary.

23、Free;end;/Create 可以同时指定上面两个参数procedure TForm1.Button3Click(Sender: TObject);var Dictionary: TDictionary; EqualityComparer: IEqualityComparer;begin EqualityComparer := TEqualityComparer.Construct( function(const Left, Right: string): Boolean begin Result := LowerCase(Left) = LowerCase(Right); end, fu

24、nction(const Value: string): Integer begin Result := StrToIntDef(Value, 0); end ); Dictionary := TDictionary.Create(9, EqualityComparer); Dictionary.Add(n1, 111); Dictionary.AddOrSetValue(N1, 123); ShowMessage(IntToStr(Dictionaryn1); 123 指定元素数后, 用不了的可以释放 Dictionary.TrimExcess; Dictionary.Free;end;/可

25、通过另一个 TDictionary 建立一个新的 TDictionaryprocedure TForm1.Button4Click(Sender: TObject);var Dictionary, DictionaryTmp: TDictionary; pair: TPair;begin DictionaryTmp := TDictionary.Create(); DictionaryTmp.Add(n1, 111); DictionaryTmp.Add(n2, 222); DictionaryTmp.Add(n3, 333); 通过另一个 TDictionary 建立 Dictionary

26、:= TDictionary.Create(DictionaryTmp); 遍历看看 for pair in Dictionary do ShowMessage(IntToStr(Dictionarypair.Key); 222 333 111 DictionaryTmp.Free; Dictionary.Free;end;/通过另一个 TDictionary 建立时, 可同时再指定 相等对比器procedure TForm1.Button5Click(Sender: TObject);var Dictionary, DictionaryTmp: TDictionary; pair: TPai

27、r; EqualityComparer: IEqualityComparer;begin DictionaryTmp := TDictionary.Create(); DictionaryTmp.Add(n1, 111); DictionaryTmp.Add(n2, 222); DictionaryTmp.Add(n3, 333); 再做个对比器 EqualityComparer := TEqualityComparer.Construct( function(const Left, Right: string): Boolean begin Result := LowerCase(Left) = LowerCase(Right); end, function(const Value: string): Integer begin Result :=

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1