是否有任何实现按键删除并同时获取值?

问题描述 投票:9回答:3

我正在做一个性能关键程序(很少学术),我正在寻求尽可能优化(不像它证明“这是”瓶颈)。

我有一个自定义字典结构(围绕.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都是O(1)。只知道是否有任何集合结构只能在一次查找中产生相同的效果。正如我所说,我正在努力尽可能地优化。只是知道。

c# .net dictionary asymptotic-complexity trygetvalue
3个回答
5
投票

University of Copenehagen's Generic Collection Library有一个Dictionary.Remove()方法似乎做你想要的:

bool删除(K到,出)

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

我自己没有使用过这个库,但是我已经在Stack Overflow上看到它推荐了几次。它是免费的商业用途,受this MIT-style license的限制。


7
投票

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


4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.