在delphi中使用哈希表的tdictionary

在Delphi 2009中引入,在Generics.Collections单元中定义的TDictionary类表示键值对的通用哈希表类型集合。...

在Delphi 2009中引入,在Generics.Collections单元中定义的TDictionary类表示键值对的通用哈希表类型集合。

TDictionary example in Delphi TDictionary example in Delphi

泛型类型也在Delphi 2009中引入,允许您定义不专门定义数据成员类型的类。

字典在某种程度上类似于数组。在数组中,使用由整数值索引的一系列(集合)值,整数值可以是任何顺序类型的值。此索引有一个下限和一个上限。

在字典中,您可以存储任何类型的键和值。

字典构造器

因此,t字典构造函数的声明:

在Delphi中,TDictionary被定义为哈希表。哈希表表示根据密钥的哈希代码组织的密钥和值对的集合。哈希表针对查找(速度)进行了优化。将键值对添加到哈希表时,将计算键值对的哈希值,并将其与添加的键值对一起存储。

TKey和TValue是泛型,可以是任何类型。例如,如果要存储在字典中的信息来自某个数据库,则键可以是GUID(或表示唯一索引的其他值)值,而该值可以是映射到数据库表中数据行的对象。

使用字典

为了简单起见,下面的示例使用整数表示TKeys,字符表示TValues。

首先,我们通过指定TKey和TValue的类型来声明字典:

然后使用Add方法填充字典。因为一个字典不能有两个具有相同键值的对,所以可以使用ContainsKey方法检查字典中是否已经存在某个键值对。

要从字典中删除一对,请使用remove方法。如果具有指定密钥的对不是字典的一部分,则此方法不会导致问题。

要通过循环键遍历所有对,可以执行for in循环。

使用TryGetValue方法检查字典中是否包含某个键值对。

整理字典

因为字典是一个哈希表,所以它不按定义的排序顺序存储项。要遍历为满足特定需要而排序的键,请利用TList——一种支持排序的通用集合类型。

上面的代码对键进行升序和降序排序,并获取值,就好像它们是按排序顺序存储在字典中一样。整型键值的降序排序使用TComparer和匿名方法。

当键和值为ToObject类型时

上面列出的示例很简单,因为键和值都是简单类型。您可以使用复杂的字典,其中键和值都是“复杂”类型,如记录或对象。

下面是另一个例子:

这里,自定义记录用于键,自定义对象/类用于值。

注意这里专门的TObjectDictionary类的用法。TObjectDictionary可以自动处理对象的生存期。

键值不能为nil,而值可以为。

实例化TObjectDictionary时,Ownerships参数指定字典是拥有键、值还是同时拥有键和值,从而帮助您避免内存泄漏。

  • 发表于 2021-10-13 10:38
  • 阅读 ( 150 )
  • 分类:数学

你可能感兴趣的文章

通用(generic)和c中的非泛型集合#(non-generic collection in c#)的区别

...Queue和HashTable。每个集合类实现IEnumerable接口。它有助于使用foreach循环遍历集合中项的元素。 ArrayList是数组的一种替代方法。如果有一个数组可以存储10个元素,它就不能存储20个元素。如果数组初始化为10个元素,但只存储5个...

  • 发布于 2020-10-24 01:08
  • 阅读 ( 340 )

为什么每次服务的密码数据库泄露时都要担心

...知道“password1”的哈希值,然后查看数据库中是否有帐户使用该哈希值。如果他们是,攻击者知道他们的密码是“password1”。 为了防止这种情况发生,服务应该对散列进行“盐分”。他们没有从密码本身创建散列,而是在散列...

  • 发布于 2021-04-08 14:27
  • 阅读 ( 177 )

散列表(hashmap)和哈希表(hashtable)的区别

...级都有自己的表现优势和劣势。有些类提供了可以按原样使用的完整实现。另一些是抽象的,提供了作为创建集合起点的框架实现。集合实现使用synchronized wrapper框架来提供同步的类,否则实现是不同步的。有几个类提供map接口...

  • 发布于 2021-06-25 20:14
  • 阅读 ( 250 )

哈希表(hashtable)和词典(dictionary)的区别

...键值对保存。哈希表或字典只能包含唯一键。程序员可以使用键查找或删除特定值。哈希表不是强类型的。因此,程序员可以将键值对的任何元素添加到哈希表中。另一方面,字典是强类型的。程序员应该指定键和值的数据类型...

  • 发布于 2021-06-30 21:47
  • 阅读 ( 1648 )

索引(indexing)和散列(hashing)的区别

...查询的磁盘访问次数来优化数据库的性能,而散列则在不使用索引结构的情况下计算数据记录在磁盘上的直接位置。 数据库是相关数据的集合。DBMS或数据库管理系统允许轻松地创建和管理数据库中的数据。用户可以编写SQL查询...

  • 发布于 2021-07-01 07:28
  • 阅读 ( 344 )

散列表(hashmap)和哈希表(hashtable)的区别

...的null值。 HashMap和hashTable是Java集合中的数据结构。它们使用键值对来存储对象。它们都有一些相似之处,比如都实现了java.util.Map接口,并且都使用哈希原理。然而,当我们在Java编程语言的上下文中提到它们时,两者之间有许...

  • 发布于 2021-07-13 20:48
  • 阅读 ( 313 )

delphi编译器版本指令

如果您计划编写可以与多个版本的Delphi编译器一起使用的Delphi代码,您需要知道您的代码是在哪个版本下编译的。 假设您正在编写自己的商业自定义组件。组件的用户可能具有与您不同的Delphi版本。如果他们试图重新编译组...

  • 发布于 2021-09-06 15:09
  • 阅读 ( 164 )

了解delphi编程的基础知识

希望掌握Delphi编程语言的初学者应该已经熟悉Microsoft Windows的基础知识。学习Delphi是最容易的,如果你从一个有指导的、基于教程的参考框架来学习它。 基本概念 从一堂历史课开始,介绍(Turbo)Pascal到Delphi 2005的演变,例...

  • 发布于 2021-09-06 15:13
  • 阅读 ( 185 )

理解delphi项目和单元源文件

简而言之,Delphi项目只是组成由Delphi创建的应用程序的文件集合。DPR是用于Delphi项目文件格式的文件扩展名,用于存储与项目相关的所有文件。这包括其他Delphi文件类型,如表单文件(DFM)和单元源文件(.PASs)。 由于Delphi...

  • 发布于 2021-09-06 15:15
  • 阅读 ( 175 )

delphi中的sql

...形式,允许您选择、插入、更新、查找数据位置等。 delphi中的tquery 如果要在应用程序中使用SQL,您将非常熟悉TQuery组件。Delphi使您的应用程序能够通过TQuery组件直接使用SQL语法来访问Paradox和dBase表(使用本地SQL—ANSI标准SQL...

  • 发布于 2021-09-08 10:40
  • 阅读 ( 189 )
bppbfdx
bppbfdx

0 篇文章

相关推荐