2009-01-23 139 views
1

我有一個字典對象:排序的字典對象

Dictionary<string, string[]> dictCompanies = new Dictionary<string, string[]>(); 

如何排序的關鍵此對象嗎?

我嘗試使用排序依據象下面,但它似乎沒有工作

dictCompanies .OrderByDescending(c=> c.Key); 

我這本字典對象綁定到aspx頁的CheckBoxList。

我試着使用排序委託該ListItemCollection ...但仍沒有運氣...

我在這裏失去了一些東西?

感謝

+0

爲什麼不使用SortedList? – 2009-01-23 07:07:39

回答

11

您不能對實際Dictionary<TKey,TValue> - 項目出來它的順序基本是由內部實現確定。儘管你可能想看看SortedDictionary<TKey,TValue>SortedList<TKey,TValue> - 他們仍然有鍵/值查找,但允許你根據鍵進行排序。如果您想以特定方式按鍵排序,您可以指定您自己的IComparer<T>

另一種選擇(取決於你的情況)應該是堅持使用字典,直到你需要它 - 然後將它複製到一個列表中並在綁定到控件之前進行排序。很顯然,在這一點上,每當有任何改變時,你都需要刷新綁定,但這對你來說可能不是問題。

如果你的OrderBy聲明真的是這樣,順便說一句,你需要理解LINQ操作符總是運算符總是接受一個序列並返回一個不同的序列(或一個聚合結果) - 它們從不修改序列到位。的確,他們不能像IEnumerable<T>是一個只讀接口。

1

看一看SortedDictionarySortedList

兩者都有O(log n)的檢索,主要的區別是在插入和移除的存儲器使用和速度:

  • 排序列表使用較少的內存比SortedDictionary。
  • SortedDictionary對未排序數據的插入和刪除操作更快:O(log n)與SortedList的O(n)相對。