c# - 对字典对象进行排序

标签 c#

我有一个字典对象:

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

如何根据键对该对象进行排序?

我试过像下面这样使用 OrderBy,但它似乎不起作用

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

我将这个字典对象绑定(bind)到 aspx 页面中的复选框列表。

我尝试使用委托(delegate)对这个 ListItemCollection 进行排序...但仍然没有成功...

我是不是漏掉了什么?

谢谢

最佳答案

您无法对实际的 Dictionary<TKey,TValue> 进行排序- 从中出来的订单项目基本上是由内部实现决定的。你可能想看看 SortedDictionary<TKey,TValue> SortedList<TKey,TValue> 虽然 - 他们仍然有键/值查找,但允许您根据键进行排序。您可以指定自己的 IComparer<T>如果您想以特定方式按键订购。

另一种选择(取决于您的情况)是在您需要它之前坚持使用字典 - 然后将其复制到列表中并在绑定(bind)到控件之前对其进行排序。显然,此时您需要在每次发生任何更改时刷新绑定(bind),但这对您来说可能不是问题。

如果您的 OrderBy 语句真的像那样独立,顺便说一句,您需要了解 LINQ 运算符总是运算符总是采用一个序列并返回一个不同的序列(或聚合结果)——它们从不修改中的序列-地方。事实上,他们不能像IEnumerable<T>是只读接口(interface)。

关于c# - 对字典对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/472137/

相关文章:

c# - .net Core 2.1 中缺少 System.Web.Http

c# - 如何在 Wp7 应用程序中处理 Web 浏览器的前后导航

c# - 如何使用 C# 和 ASP.NET 从网页截取 div 的屏幕截图?

c# - ObservableCollection 和线程

c# - 将范围行从一个数据表添加到另一个

c# - WPF 中的平滑 ProgressBar

c# - EmguCV 中的对象跟踪

c# - .NET 3.5 中的 URL 重写

c# - HangFire "Cannot access a disposed object. Object name: ' SqlDelegatedTransaction'”

c# - 如何在 Microsoft Azure 虚拟服务器上创建和保存临时文件