是否有任何实现删除键,并获得值在同一时间

本文关键字:同一时间 任何 实现 删除 是否 | 更新日期: 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
}

我知道框架中没有任何东西,但是在某个地方有实现吗?如果是这样的话,我会把我的后台字典换成那个。

编辑:嗯,我知道TryGetValueRemove都是0(1)。只需要知道是否有任何集合结构可以在一次查找中产生相同的效果。就像我说的,我在尽可能地优化。仅仅知道。

是否有任何实现删除键,并获得值在同一时间

ConcurrentDictionary有一个TryRemove方法来做这个。它的工作原理就像TryGet,但它也删除了元素。

Dictionary<TKey, TValue>.TryGetValueDictionary<TKey, TValue>.Remove方法都是O(1)操作,所以我认为您不应该在这里关心性能

哥本哈根大学的通用集合图书馆有一个Dictionary.Remove()方法,似乎可以做你想做的事情:

bool Remove(K K, out V V)

如果字典中包含键值等于k的条目,则返回true如果是这样,则删除该项并将相关值赋给v;否则返回false并将T的默认值赋给v。

我自己没有使用过这个库,但我在Stack Overflow上看到过几次推荐。在商业上可以免费使用,但要遵守麻省理工学院风格的许可协议。