是否有任何实现删除键,并获得值在同一时间
本文关键字:同一时间 任何 实现 删除 是否 | 更新日期: 2023-09-27 18:07:17
我正在做一个性能关键程序(小学术的东西),我正在寻找尽可能优化(不像它证明"这是"瓶颈)。
我有一个自定义字典结构(. 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
都是0(1)。只需要知道是否有任何集合结构可以在一次查找中产生相同的效果。就像我说的,我在尽可能地优化。仅仅知道。
ConcurrentDictionary有一个TryRemove
方法来做这个。它的工作原理就像TryGet
,但它也删除了元素。
Dictionary<TKey, TValue>.TryGetValue
和Dictionary<TKey, TValue>.Remove
方法都是O(1)操作,所以我认为您不应该在这里关心性能
哥本哈根大学的通用集合图书馆有一个Dictionary.Remove()
方法,似乎可以做你想做的事情:
bool Remove(K K, out V V)
如果字典中包含键值等于k的条目,则返回true如果是这样,则删除该项并将相关值赋给v;否则返回false并将T的默认值赋给v。
我自己没有使用过这个库,但我在Stack Overflow上看到过几次推荐。在商业上可以免费使用,但要遵守麻省理工学院风格的许可协议。