如何在c#中正确使用SortedDictionary?

我正在尝试做一些非常简单的事情,但似乎我不理解SortedDictionary.

我想要做的是以下内容:
创建一个排序字典,按照某个浮点数对我的项目进行排序,因此我创建了一个类似于此的字典

SortedDictionary<float, Node<T>> allNodes = new SortedDictionary<float, Node<T>>();

现在我添加项目之后,我想逐个删除它们(每次删除都应该从最小到最大的复杂度为O(log(n)).

我该怎么做?我认为只是allNodes [0]会给我最小的,但事实并非如此.

更重要的是,似乎字典无法处理重复键.我觉得我使用的是错误的数据结构……
如果我有一堆节点要按其距离(浮点)排序,我应该使用其他东西吗?

最佳答案
allNodes [0]不会给你字典中的第一项 – 它会给你一个浮动键值为0的项目.

如果你想要第一个项目,请尝试使用allNodes.Values.First().或者找到第一个键使用allNodes.Keys.First()

要逐个删除项目,请循环访问Keys集合的副本并调用allNodes.Remove(key);

foreach (var key in allNodes.Keys.ToList())
{
    allNodes.Remove(key);
}

要回答你的问题的附录,是的SortedDictionary(任何类型的词典)都不会处理重复的键 – 如果你尝试添加一个带有现有键的项目,它将覆盖以前的值.

您可以使用SortedDictionary< float,List< Node< T>>>但是你有复杂的提取集合与项目,需要初始化每个列表而不是只是添加项目等.这是可能的,可能仍然是最快的添加和获取结构,但它确实增加了一点复杂性.

转载注明原文:如何在c#中正确使用SortedDictionary? - 代码日志