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

Oop*_*ser 9 c# dictionary sorted sorteddictionary

我想做一些非常简单的事情,但似乎我不明白SortedDictionary.

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

SortedDictionary<float, Node<T>> allNodes = new SortedDictionary<float, Node<T>>();
Run Code Online (Sandbox Code Playgroud)

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

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

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

D S*_*ley 16

allNodes[0]不会给你字典中的第一项 - 它会给你一个float 键值为的项目0.

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

删除一个项目一个,遍历一个副本中的Keys采集和呼叫allNodes.Remove(key);

foreach (var key in allNodes.Keys.ToList())
{
    allNodes.Remove(key);
}
Run Code Online (Sandbox Code Playgroud)

要回答您的问题的附录,是SortedDictionary(任何类型的Dictionary问题)都不会处理重复的密钥 - 如果您尝试添加具有现有密钥的项目,它将覆盖以前的值.

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