2009-01-23 128 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)相对。