文档章节

详测 Generics Collections TDictionary(5): 多种 Create 手段

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 574
阅读 8
收藏 0
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Generics.Collections, Generics.Defaults;

//Create 可以指定元素数, 这样可以提前分配空间以加快速度
procedure TForm1.Button1Click(Sender: TObject);
var
  Dictionary: TDictionary<string,Integer>;
begin
  Dictionary := TDictionary<string,Integer>.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<string,Integer>;
  EqualityComparer: IEqualityComparer<string>; {相等对比器}
begin
  {通过 IEqualityComparer 让 TDictionary 的 Key 忽略大小写}
  EqualityComparer := TEqualityComparer<string>.Construct(
     function(const Left, Right: string): Boolean begin
       Result := LowerCase(Left) = LowerCase(Right);
     end, 
     function(const Value: string): Integer begin
       Result := StrToIntDef(Value, 0); {我暂时不知道这个函数的作用, 随便写的}
     end
  );
  
  Dictionary := TDictionary<string,Integer>.Create(EqualityComparer);

  Dictionary.Add('n1', 111);
  Dictionary.Add('n2', 222);
  Dictionary.Add('n3', 333);

  {如果不是如上建立, 下面这句将会产生一个新元素, 而不是更新 n1 的值}
  Dictionary.AddOrSetValue('N1', 123); 
  ShowMessage(IntToStr(Dictionary['n1'])); {123}
    
  Dictionary.Free;
end;

//Create 可以同时指定上面两个参数
procedure TForm1.Button3Click(Sender: TObject);
var
  Dictionary: TDictionary<string,Integer>;
  EqualityComparer: IEqualityComparer<string>;
begin
  EqualityComparer := TEqualityComparer<string>.Construct(
     function(const Left, Right: string): Boolean begin
       Result := LowerCase(Left) = LowerCase(Right);
     end, 
     function(const Value: string): Integer begin
       Result := StrToIntDef(Value, 0);
     end
  );
  
  Dictionary := TDictionary<string,Integer>.Create(9, EqualityComparer);

  Dictionary.Add('n1', 111);
  Dictionary.AddOrSetValue('N1', 123); 
  ShowMessage(IntToStr(Dictionary['n1'])); {123}

  {指定元素数后, 用不了的可以释放}
  Dictionary.TrimExcess;
    
  Dictionary.Free;
end;

//可通过另一个 TDictionary 建立一个新的 TDictionary
procedure TForm1.Button4Click(Sender: TObject);
var
  Dictionary, DictionaryTmp: TDictionary<string,Integer>;
  pair: TPair<string,Integer>;
begin
  DictionaryTmp := TDictionary<string,Integer>.Create();
  DictionaryTmp.Add('n1', 111);
  DictionaryTmp.Add('n2', 222);
  DictionaryTmp.Add('n3', 333);

  {通过另一个 TDictionary 建立}
  Dictionary := TDictionary<string,Integer>.Create(DictionaryTmp);

  {遍历看看}
  for pair in Dictionary do ShowMessage(IntToStr(Dictionary[pair.Key]));
  {222 333 111}  
    
  DictionaryTmp.Free;
  Dictionary.Free;
end;

//通过另一个 TDictionary 建立时, 可同时再指定 "相等对比器"
procedure TForm1.Button5Click(Sender: TObject);
var
  Dictionary, DictionaryTmp: TDictionary<string,Integer>;
  pair: TPair<string,Integer>;
  EqualityComparer: IEqualityComparer<string>;
begin
  DictionaryTmp := TDictionary<string,Integer>.Create();
  DictionaryTmp.Add('n1', 111);
  DictionaryTmp.Add('n2', 222);
  DictionaryTmp.Add('n3', 333);

  {再做个对比器}
  EqualityComparer := TEqualityComparer<string>.Construct(
    function(const Left, Right: string): Boolean begin
      Result := LowerCase(Left) = LowerCase(Right);
    end, 
    function(const Value: string): Integer begin
      Result := StrToIntDef(Value, 0);
    end
  );

  {通过另一个 TDictionary 建立, 同时更换对比器}
  Dictionary := TDictionary<string,Integer>.Create(DictionaryTmp, EqualityComparer);
  {测试对比器}
  Dictionary.AddOrSetValue('N1', 999);

  {遍历看看}
  for pair in Dictionary do ShowMessage(IntToStr(Dictionary[pair.Key]));
  {222 333 999} 

  DictionaryTmp.Free;
  Dictionary.Free;
end;

end.

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/10/11/1581068.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
Delphi 2010 中的泛型

Delphi 2010 中的泛型日期:2010年5月31日 作者: 人气:10504 查看:[大字体 中字体 小字体]2010已发布很长时间了,口碑还不错,准备用它开发下一项目,但对泛型等新东西的认识还不够,就搜了...

vga
2016/08/09
19
0
理解 RESTful WebService

RESTful 服务遵循REST(Representational State Transfer)的架构风格,中文翻译为:表现层状态转化 对于所有的CRUD(Read/Create/Update/Delete),RESTFul架构基于HTTP的简单动作(GET,POST,PU...

huojiao2006
2017/02/27
0
0
GBin1推荐教程之Java泛类型(Generics)快速入门

发布时间: 2011-9-20 来源:javacodegeeks.com 翻译: gbin1.com 泛类型(Generics)是Java SE5.0里的特性,在发布后的几年里,我相信每个java开发者都不仅仅听说过,而且实实在在的使用过。...

gbin1
2011/09/21
180
0
Apache Maven 3.0.3 Released

相比较 Maven 3.0.2 版本,3.0.3 改进主要包括: [MNG-3575] - Allow hexadecimal parameters [MNG-4971] - Display maven home in version info * [MNG-4984] - Simplify drop in of 3rd p......

红薯
2011/03/05
1K
0
java范型中的get、put原则

java范型中的get、put原则 只要有可能,一个好的习惯就是插入通配符(wildcards ),但是如何决定选择哪种通配符呢?即什么场景选择extends,什么场景选择super,以及什么场景不适合选择通配...

Beaver_
2015/05/24
565
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

No compiler is provided in this environment

maven 编译报错No compiler is provided in this environment 这个是由于maven在编译的过程中回使用到jdk ,它只会在环境变量中去寻找JAVA_HOME,如果没找到JAVA_HOME就会报这个错误。只要重...

优雅的胖子
9分钟前
0
0
(图文)最详细的XAMPP的安装及使用教程

XAMPP的安装及使用教程 1、简介 2、安装运行 3、配置Apache 4、配置MySQL 5、测试 6、修改MySQL默认密码 7、部署 XAMPP的安装及使用教程 1、简介 XAMPP(Apache+MySQL+PHP+PERL)是一个功能强...

梦梦阁
9分钟前
0
0
python 批量JSON数据,插入数据库

newList=[{"link":"https://www.1.com/","ga_tag":"xvideos","image":"http://static.2.mobi/views/images/xvideos.png?x-oss-process=style/120"},{"link":"https://www.3.com/","ga_tag":"......

Liens
12分钟前
0
0
mediarecord

mediarecorder what=268435556 -1007 解决方案 mPreviewSize = mCamera.getParameters().getPreferredPreviewSizeForVideo();...

zdglf
14分钟前
0
0
安装zookeeper和kafaka

安装zookeeper和kafaka http://mirrors.hust.edu.cn/apache/zookeeper/ http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.10/ http://mirrors.hust.edu.cn/apache/zookeeper/zoo......

蜗牛奔跑
15分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部