【发布时间】:2013-04-22 16:48:09
【问题描述】:
我需要维护字符串和整数之间的对应关系,然后查找字符串值并返回整数。满足以下要求的存储此信息的最佳结构是什么:
速度和内存大小按顺序很重要。
我不想重新发明轮子并编写自己的排序例程。当然,调用 Sort(CompareFunction) 就可以了。
条件:
整数不保证是连续的,也不存在像 0 或 1 这样的“起始值”
数据对的数量可以从 100 到 100000 不等
数据都是一开始就读入的,没有后续的增删改查
-
FWIW 字符串是 Outlook (MAPI?) 用来识别条目的十六进制条目 ID。示例:00000000FE42AA0A18C71A10E8850B651C24000003000000040000000000000018000000000000001E7FDF4152B0E944BA66DFBF2C6A6416E4F52000487F22
有这么多选项(TStringList(带有对象或名称/值对)、TObjectList、TDictionary,...),我最好先征求意见...
我读过How can I search faster for name/value pairs in a Delphi TStringList? 建议字符串/字符串对使用 TDictionary,Sorting multidimensional array in Delphi 2007 建议字符串/整数使用 TStringlist 对象,但对整数进行排序。
【问题讨论】:
-
我会说一条记录,例如
type TNamedInt = record Name: String; Value: Integer; end;,然后是它的数组type TNamedInts = Array of TNamedInt,然后您可以通过各种方法(例如Lookup(Name: String): Integer;)自行查找/操作它 -
@JerryDodge 如果您实际上没有为
Lookup提供实现,那么说这样的话很容易。更重要的是,您选择用来使Lookup高效的算法可能会很好地影响底层数据结构。字典是一个很好的例子。 -
@David 的确,这就是为什么我离开的原因是以“我会说”开头的评论,而不是好像说“就是这样”的答案。
-
*留下它(提醒我在喝完咖啡之前不要打字)
标签: delphi data-structures storage delphi-xe2