我正在使用C#中的哈希表,由于某种原因,我没有得到预期的结果,因为Hashtable对所有条目进行排序。
我想删除这种排序,因为我已经在需要打印的特定订单中列出了
列表会根据顺序正确添加到哈希表中,但是当我遍历HashTable时,它会对所有条目进行排序并生成完全排序的条目。顺便说一下,我使用DictionaryEntry迭代哈希表。
由于
答案 0 :(得分:3)
这是预期的行为。它不对条目进行排序,Hashtables条目以非确定的顺序迭代。它们针对随机访问进行了优化,因此插入顺序不会保留在HashTable
结构中,因此不能按插入顺序迭代这些条目。
根据MSDN page序列化和反序列化,哈希表可以导致迭代顺序发生变化。
您可以使用NameValueCollection
中所述的SortedDictionary
或this question/answer
你的另一个选择(假设上面的两个选项都没有你想要的)是创建一个完全符合你想要的类。您可以跟踪条目并将它们存储在列表(以及哈希表)中,然后返回列表的迭代器而不是类中的哈希表,这样您就可以按顺序进行迭代并快速随机访问。