2011-10-13 35 views
0

我正在使用C#中的散列表,並且由於某種原因,我沒有得到預期的結果,因爲散列表對所有條目進行排序。Unsort或unorder HashTable in .net

我想刪除這個排序,因爲我已經有一個特別下令需要打印

列表被添加基於該順序正確hashtable中,但是當我通過哈希表迭代,它排序所有列表條目並生成完全排序的條目。順便說一句我正在使用DictionaryEntry迭代通過散列表。

謝謝

+0

也許你可以嘗試在System.Collections.Generic.SortedDictionary下使用SortedDictionary 它的一個構造函數以IComparer 作爲它的參數。 –

+0

爲什麼你把它放在第一個字典?爲什麼不在名單? –

回答

3

這是預期的行爲。它不對條目排序,哈希表條目以非確定性順序迭代。它們針對隨機訪問進行了優化,因此插入順序不會保留在HashTable結構中,因此條目無法按插入順序進行迭代。

根據MSDN page序列化和反序列化散列表可以導致迭代順序改變。

this question/answer

您的其他選項列出您可能能夠使用NameValueCollectionSortedDictionary(假設未在上述選項中做你想要的)是創建一個類,它不正是你想要的東西。您可以跟蹤條目並將它們存儲在列表中(以及散列表),然後返回列表的迭代器而不是來自類的散列表,這樣您就可以按順序進行迭代並快速進行隨機訪問。

+0

謝謝你。但問題是我有一個與哈希表中的每個鍵相關的列表。基本上我使用Hashtable是因爲這個原因,所以我可以保存基於hashtable鍵的字符串集合。因此,首先我通過HashTable值迭代選擇它的LIst並遍歷列表 – Aneesh

+0

爲什麼不能使用SortedDictionary >然後呢? (或者什麼類型的元素在你的列表中? –

+0

真棒,它可以工作,但即使按照字母順序排序列表...幫助我PLZ ... – Aneesh