Is there any implementation to Remove by Key and get the Value at the same time?
.net, asymptotic-complexity, c#, dictionary, trygetvalue
Solution
The University of Copenehagen's Generic Collection Library has a `Dictionary.Remove()` method that appears to do what you want:
bool Remove(K k, out V v)
Returns true if the dictionary contains an entry whose key equals k and if so removes that entry and assigns the associated value to v; otherwise returns false and assigns the default value for T to v.
I've not used this library myself, but I've seen it recommended a few times here on Stack Overflow. It's free to use commercially, subject to this MIT-style license.
Problem
I'm doing a performance critical program (little academic stuff) and I'm looking to optimize wherever possible (not like it proved "this is the" bottleneck). I have a custom dictionary structure (a wrapper around .NET `Dictionary<,>`) and I would constantly Remove items at one stage (by the `Key` value). I need the `Value` of the removed items. Right now I have to do: ``` T t; if !TryGet(key, out t) return false; Remove(key); ``` That's two lookups. I would love this: ``` public bool Remove(S key, out T value) { // implementation } ``` I know there is nothing in the framework, but is there an implementation somewhere? If so I would change my backing dictionary with that one. Edit: Hmm I know both `TryGetValue` and `Remove` are O(1). Just knowing if there is any collection structure that would give the same effect in just one lookup. As I said I'm trying to optimize as much as possible. Just knowing.