C#-二进制搜索(排序)字典
我有一个按字母顺序排列的记录文件:C#-二进制搜索(排序)字典,c#,.net,dictionary,search,C#,.net,Dictionary,Search,我有一个按字母顺序排列的记录文件: 安德鲁d432 本x127 扎克b332 第一个字段是人名,第二个字段是某个id。读取文件后,我不需要对数据进行任何更改 我想将每个记录视为一个键值对,其中人名是键。我不知道使用哪个类来访问记录(尽可能快)词典没有二进制搜索。另一方面,据我所知,SortedList和SortedDictionary应仅在需要插入/删除数据时使用 编辑:澄清一下,我指的是访问记录,比如: x = MyDic[Zac] 一般来说,字典查找将比集合的二进制搜索更快。有两种
- 安德鲁d432
- 本x127
- 扎克b332
SortedList
和SortedDictionary
应仅在需要插入/删除数据时使用
编辑:澄清一下,我指的是访问记录,比如:
x = MyDic[Zac]
一般来说,字典查找将比集合的二进制搜索更快。有两种具体情况并非如此:
String.GetHashCode()
方法时#2会出现问题。我唯一遇到麻烦的时候就是创建了一个错误的GetHashCode()
方法。一般来说,字典查找比集合的二进制搜索要快。有两种具体情况并非如此:
String.GetHashCode()
方法时#2会出现问题。我唯一遇到麻烦的时候是我创建了一个糟糕的GetHashCode()
方法。没有人说为什么字典是O(1),为什么它比二进制搜索快。一个侧重点是字典不是按键排序的。字典的全部要点是转到键值引用的项的精确*(出于所有实际目的)位置。它不“搜索”项目-它知道您想要的项目的确切位置
因此,在字典上进行二进制搜索是毫无意义的,因为当集合已经知道某个项的确切位置时,不需要“搜索”该项
*在散列冲突的情况下,这并不完全正确,但字典的原则是直接获取项,任何额外的查找都是实现细节,应该很少
另一方面,据我所知,SortedList
和SortedDictionary
应仅在需要插入/删除数据时使用
当您希望在添加或删除数据时自动对数据进行排序时,应使用它们。请注意,SortedDictionary
失去了“普通”字典的性能增益,因为它现在必须使用键值搜索位置。它的主要用途是允许您按顺序迭代键
如果每个项都有一个唯一的键值,不需要按任何特定顺序迭代这些项,并且想要最快的“获取”性能,那么字典
就是最好的选择。没有人说明为什么字典是O(1),为什么它比二进制搜索快。一个侧重点是字典不是按键排序的。字典的全部要点是转到键值引用的项的精确*(出于所有实际目的)位置。它不“搜索”项目-它知道您想要的项目的确切位置
因此,在字典上进行二进制搜索是毫无意义的,因为当集合已经知道某个项的确切位置时,不需要“搜索”该项
*在散列冲突的情况下,这并不完全正确,但字典的原则是直接获取项,任何额外的查找都是实现细节,应该很少
另一方面,据我所知,SortedList
和SortedDictionary
应仅在需要插入/删除数据时使用
当您希望在添加或删除数据时自动对数据进行排序时,应使用它们。请注意,SortedDictionary
失去了“普通”字典的性能增益,因为它现在必须使用键值搜索位置。它的主要用途是允许您按顺序迭代键
如果每个项都有一个唯一的键值,不需要按任何特定顺序迭代项,并且想要最快的“获取”性能,那么
Dictionary
就是最好的选择。Dictionary将具有恒定的时间访问权限,因为它将使用键的散列作为值的索引。假设您需要精确的匹配查找,则无需进行二进制搜索。您有一个字典,它(应该)为您提供对您想要的任何键/值(如果存在)的访问权限。你到底想搜索什么?如果你的密钥都是唯一的-那么Dictiona