FreePascal是否有一个字典对象?

6

在搜索FreePascal相关信息时,很难找到适用的内容,因为所有的搜索结果似乎都与Delphi有关。

是否有内置的字典对象?

这个页面在“通用类”一节中提到了“TDictionary”,但我不知道它可能在哪个单元中,或者它是否真的存在。


3
fgl 单元包含在 这里 定义的通用类。一个使用 TFPGMap 的例子: Class Map or Dictionary, anyone? - LU RD
2
最接近的,我认为是fgl.TFPGMap。LU RD:将其制作成一个合适的答案,以便可以被接受。 - Marco van de Voort
1
在谷歌搜索文章时,请在搜索中加入“fpc pascal”。 - Ian Macintosh
2个回答

6

单元fgl包含了freepascal的基本通用类。

在这些类中,最接近TDictionary的是TFPGMap

如何使用此类的示例可以在这里找到:类地图或字典,有人吗?


1
忘记 TFPGMap 吧。它被实现为 数组,对于任何目的来说都太慢了。即使使用实际的数组也会更快。如果你被迫使用它,你需要将 sorted 设置为 true,这样它至少会使用二分查找而不是线性查找来进行读取。 - BeniBela
1
@BeniBela,你最终使用了什么? - Redoman
2
@jj_ 首先,我对它们进行了基准测试。Rtl-generics似乎是整体最好的选择,但我不信任它们在fpc 3.1以下的版本中的表现。(复杂泛型很棘手,即使是Lazarus打开它们的源代码也会崩溃)ghashmap.THashMap是一个可以接受的备选方案。尽管我最终使用了Bero的Fast Light Regular Expressions library中的哈希映射,因为我已经在使用该库进行正则表达式,并且它的速度出奇的快。 - BeniBela
谢谢!这是一个对于新手学习Free Pascal来说很好的获取最新信息的源。 - Redoman

5
你可以使用通用集合单元中的非常兼容的TDictionary: 该方法适用于FPC主干版本30239及更高版本。 编辑 05.08.2016 Generics.Collections库已被添加到FPC主干作为rtl-generics包,版本号为r34229。Win32 + Lazarus主干的最新预编译FPC主干版本(带有Generics.Collections)可在http://newpascal.org 上获得。Generics.Collections存储库(https://github.com/dathox/generics.collections)仍将用于维护(应经常与FPC主干同步)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接