【发布时间】:2013-03-24 23:39:32
【问题描述】:
我正在做一个性能关键的程序(一些学术性的东西),并且我希望尽可能地进行优化(不像它被证明是“这是”瓶颈)。
我有一个自定义字典结构(.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).. . -
看来我得自己写一篇了..
-
看起来那样,没有内置的东西可以返回从字典中删除的项目。
-
@nawfal 请在您自己的
Dictionary<,>实现之前对您的应用程序运行分析器(或进行自己的 分析)以识别真正的 瓶颈. (或者,您可以获取Mono Dictionary<,> implementation from its source code repository...) -
@ChrisSinclair 不用担心,如果我自己编写,我会先获取原始源代码并在此基础上进行构建。当然,我也会有时间(这始终是我的首要考虑)
标签: c# .net dictionary asymptotic-complexity trygetvalue