c# - .NET:如何对通用词典进行排序?

标签 c# .net

我有一个字典: Dictionary<string, CustomClass> _details = new Dictionary<string, CustomClass>()

CustomClass工具 IComparable因为 CompareTo() 中有自定义排序逻辑方法。

我想遍历我所有的 CustomClass在 _details 中按排序顺序排列。

所以我想做这样的事情:

foreach (string value in _details.Values.Sort())
{

}

但是Sort()不是该类型的方法

我有哪些选择?

最佳答案

你的问题有点不清楚,但在重读它时似乎你想按值而不是键排序。在这种情况下,LINQ 是使用 OrderBy 的最佳方法。方法:

foreach (var pair in _details.OrderBy(p => p.Value))
{
    // Use pair.Key and pair.Value here
}

或者如果您首先只想要值:

foreach (var value in _details.Values.OrderBy(p => p))
{
    // Use value in here
}

请注意,您不能就地对字典进行排序 - Dictionary<,>基本上是无序的(或者更确切地说,顺序是一个实现细节,不能以可靠的方式更改)。

如果您想按 排序,使用 SortedList<,> 可能会更好或 SortedDictionary<,> 开始。这两者都会使集合永久地按键排序。

关于c# - .NET:如何对通用词典进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7029741/

相关文章:

c# - 将带名称和不带名称的命名空间添加到 XElement

.net - 如何检查给定用户是否是内置管理员组的成员?

c# - 在 LINQ 中将 2 个 xml 合并为一个新 XML 的有效方法

c# - 如何在 Win10 IoT 中获取 SerialDevice 状态

c# - 了解隐藏功能

.net - 如何将 signalR 与 Redux-observable 一起使用?

c# - CSS 在设计 View 中显示而不是在运行时

c# - OS X 上的 Mono 与 MSVC 2010 同行兼容吗?

c# - 首先在 EF 4.1 代码中以 "schema.tablename"格式映射 POCO,使用 dotconnect for Oracle

c# - MVC EnumMember 自定义字符串