【发布时间】:2017-04-22 12:21:14
【问题描述】:
我有一个按字母顺序排列的记录文件:
- 安德鲁 d432
- 本 x127
- ...
- ...
- 扎克 b332
第一个字段是人名,第二个字段是一些 id。读取文件后,我无需对数据进行任何更改。
我想将每条记录视为键值对,其中人名是键。我不知道使用哪个类来访问记录(尽可能快)。 Dictionary 没有二进制搜索。另一方面,据我了解,SortedList 和 SortedDictionary 仅应在我需要插入/删除数据时使用。
编辑:为了澄清,我说的是简单地访问记录,例如:
x = MyDic[Zac]
【问题讨论】:
-
字典将具有恒定的时间访问,因为它将使用键的哈希作为值的索引。假设您想要精确匹配查找,则不需要二进制搜索。
-
困惑。你有一本字典(应该)为你提供 O(1) 访问你想要的任何键/值(如果它存在的话)。你到底想搜索什么?
-
如果您的密钥都是唯一的 - 那么
Dictionary<string, string>是适合您的数据结构,但您根本不需要二进制搜索。如果您的键不是唯一的,那么您可能需要Dictionary<string, List<string>>,对于每个唯一键,您将在其中存储 id 列表 - 同样您不需要二进制搜索,字典将搜索恒定时间。 -
当您使用字典时,一旦您拥有 Key 值,您就可以直接获取该值,例如在您的情况下,命令 MyDictionary["Zac"] 应该返回“b332”。您到底想进行什么样的搜索?
-
@Bohoo 字典在大多数情况下会比对已排序数组(如果数组的大小相对较大)的二进制搜索更快,因为它需要 O(1) 而不是 O(log(n))。
标签: c# .net dictionary search