我正在编写一款性能关键的程序(不是很学术),并且我正在寻找尽可能优化的方法(并不像证明“这是”瓶颈)。
我有一个自定义的字典结构(.NET
我有一个自定义的字典结构(.NET
Dictionary<,>
的包装器),并且在某个阶段我需要不断地删除项目(按Key
值)。我需要已删除项的Value
。目前我需要执行以下操作:T t;
if !TryGet(key, out t)
return false;
Remove(key);
这需要进行两次查找。我希望可以做到以下简化:
public bool Remove(S key, out T value)
{
// implementation
}
我知道框架中没有相关实现,但是是否有其他地方有这方面的实现呢?如果有的话,我会用那个字典替换我的后备字典。
编辑: 嗯,我知道TryGetValue
和Remove
都是O(1)的。只是想知道是否有任何集合结构可以在一次查找中达到同样的效果。就像我说的,我正在尽可能地优化。只是想知道。
Dictionary
中的Get
和Remove
都具有摊销复杂度为O(1)
,因此调用Get
+Remove
仍将给您提供O(1)
... - Patryk ĆwiekDictionary<,>
之前,请运行分析器(或进行自己的分析)来识别真正的瓶颈。 (或者,您可以从其源代码存储库中获取 Mono Dictionary<,> 实现...) - Chris Sinclair