Delphi XE7 随笔(2)- 字典

只说大家平时关注得比较少的

var
  mm: TDictionary<string, TObject>;
  acompare: IEqualityComparer<string>;
  pp:TPair<string,TObject>;
begin
    acompare := TEqualityComparer<string>.Construct(
        function(const Left, Right: string):Boolean
        begin
            result := UpperCase(Left) = UpperCase(Right);
        end,
        function(const Value:string):Integer
        begin
            Result:=Length(Value);
        end);
    mm:=TDictionary<string, TObject>.Create(acompare);
    mm.Add('abc',TObject(PChar('中国')));
    mm.AddOrSetValue('Abc',TObject(PChar('beijing')));
    for pp in mm do
        ShowMessage(pp.Key+':'+PChar(pp.Value));
end;

上面的代码中,有一个比较类TEqualityComparer,用来判断新加的一组key.value中的key是不是存在。

Construct中的第一个函数就不说了,说第二个函数,这个函数大家可能都只是照着用,但是不清楚为什么这么用。

帮助文档中是这么说的:Generate a hash code. Simply return the length of the string as its hash code.

字典是以hash表的方式存储数据的,有了hash值,可以更快地定位所要的数据,以上面的代码为例,其hash存储的格式应该是这样的:

1  a:value  b:value  c:value

2  aa:value  bb:value  cc:value

....

其中a,b,c,aa,bb,cc就是key,而前面的1、2则是hash值,用length生成,如length(a) = 1,length(aa) = 2 , length(ab) = 2....

通过key的hash值,能快速定位到1、2...,然后再找到对应的key和value。

 

转载于:https://www.cnblogs.com/rockmmm/p/6442853.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值