gpt4 book ai didi

c# - 使用 ToDictionary 构建排序字典

转载 作者:可可西里 更新时间:2023-11-01 08:59:27 31 4
gpt4 key购买 nike

我不是 C# 和 LINQ 方面的专家。

我有一个Dictionary,我理解是一个哈希表,也就是key没有排序。

dataBase = new Dictionary<string, Record>()

Record 是一个用户定义的类,它保存给定键字符串的大量数据。

我发现了一个有趣的示例,它通过 LINQ 将此 Dictionary 转换为 sorted 字典:

var sortedDict = (from entry in dataBase orderby entry.Key ascending select entry)
.ToDictionary(pair => pair.Key, pair => pair.Value);

这段代码工作正常。生成的 sortedDict 按键排序。

问题:我发现 sortedDict 仍然是一个哈希表,一种类型:

System.Collections.Generic.Dictionary<string, Record>

我预计生成的字典应该是一种像 C++ STL 中的 map,它通常作为(平衡的)二叉树来实现以保持键的顺序。然而,生成的字典仍然是一个哈希表。

sortedDict 如何保持排序?哈希表不能保存键的顺序。 C# 的 Generic.Dictionary 的实现不是典型的哈希表吗?

最佳答案

Dictionary 维护两个数据结构:一个按插入顺序保存以供枚举的平面数组,以及用于按键检索的哈希表。

如果您在有序集合上使用 ToDictionary(),它在枚举时将是有序的,但不会按顺序维护。任何新插入的项目都会在枚举时添加到后面。

编辑:如果您想依赖这种行为,我建议您查看 MSDN 文档,看看这是有保证的,还是只是偶然的。

关于c# - 使用 ToDictionary 构建排序字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582682/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com