代码之家  ›  专栏  ›  技术社区  ›  nawfal Donny V.

是否有任何实现可以按键移除并同时获取值?[副本]

  •  12
  • nawfal Donny V.  · 技术社区  · 13 年前

    我正在做一个性能关键型项目(一些学术性的东西),我希望尽可能优化(不像它证明的那样“这是”瓶颈)。

    我有一个自定义的字典结构(一个围绕.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)。只需知道是否有任何集合结构可以在一次查找中提供相同的效果。正如我所说,我正在尽可能地进行优化。只是知道而已。

    3 回复  |  直到 13 年前
        1
  •  8
  •   javaNinja    10 年前

    这个 ConcurrentDictionary 有一个 TryRemove 方法。它的工作原理就像 TryGet 但是它也去除了元件。

        2
  •  7
  •   MarcinJuraszek    13 年前

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

        3
  •  6
  •   Matthew Watson    13 年前

    这个 University of Copenehagen's Generic Collection Library 有一个 Dictionary.Remove() 方法,该方法似乎可以执行您想要的操作:

    布尔删除(K K,out V V)

    如果字典中包含关键字等于k的条目,则返回true 并且如果是,则移除该条目并将相关联的值分配给v; 否则返回false,并将T的默认值分配给v。

    我自己没有使用过这个库,但我在Stack Overflow上看到过它被推荐过几次。它可以免费商业使用,但须遵守 this MIT-style license .

    推荐文章