【问题标题】:Unsort or unorder HashTable in .net在 .net 中取消排序或取消排序 HashTable
【发布时间】:2011-12-06 19:19:55
【问题描述】:

我正在使用 C# 中的哈希表,由于某种原因,我没有得到预期的结果,因为哈希表对所有条目进行了排序。

我想删除这种排序,因为我已经有需要打印的特定顺序的列表

列表会根据顺序正确添加到哈希表中,但是当我遍历哈希表时,它会对所有条目进行排序并生成完全排序的条目。顺便说一句,我正在使用 DictionaryEntry 遍历哈希表。

谢谢

【问题讨论】:

  • 也许您可以尝试使用 System.Collections.Generic.SortedDictionary 下的 SortedDictionary 它的构造函数之一将 IComparer 作为其参数。
  • 你为什么把它放在字典里?为什么不在 List 中?

标签: c# .net sorting hashtable


【解决方案1】:

这是预期的行为。它不是对条目进行排序,哈希表条目以不确定的顺序迭代。它们针对随机访问进行了优化,因此插入顺序不会保留在 HashTable 结构中,因此无法按插入顺序迭代条目。

根据MSDN page,对哈希表进行序列化和反序列化会导致迭代顺序发生变化。

您或许可以使用this question/answer 中所述的NameValueCollectionSortedDictionary

您的另一个选择(假设以上选项都不是您想要的)是创建一个完全符合您想要的类。您可以跟踪条目并将它们存储在一个列表(以及哈希表)中,然后返回列表的迭代器而不是您的类中的哈希表,这样您就可以按顺序获得迭代和快速随机访问。

【讨论】:

  • 谢谢。但问题是我有一个与哈希表中的每个键相关联的列表。基本上我出于这个原因使用了 Hashtable,以便我可以保存基于 hashtable 键的字符串集合。所以首先我遍历 HashTable 值选择它的 LIst 并遍历列表
  • 那你为什么不能使用 SortedDictionary> 呢? (或者你的列表中的元素是什么?
  • 你是什么意思它按字母顺序对列表进行排序。有一个不起作用的代码示例会有所帮助。
猜你喜欢
  • 2014-01-11
  • 1970-01-01
  • 2018-07-30
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多