Is there some way to delete items meeting a predicate from maps that doesn't require using external memory? I could only find Vec::retain.
If the answer is no (which I suspect), I'm half-tempted to open an RFC to extend retain to other types. Is there any obvious issue that prevents it? I don't want to go through the trouble of the RFC process if it's very obvious why this method only exists for Vec.
My particular use case is removing items older than a certain time from a hashMap. The code I just wrote only has to deal with 4 or 5 items, so it's not that big a deal. But I shortly need to write some code that deals with thousands of them.
Any help is appreciated.
I don't know any way to do this, but I think it sounds like a good idea.
The Entry
API would almost let you do it with OccupiedEntry::remove()
, but there's no iterator for this AFAIK. A new iter_entries()
could perhaps let you step through every OccupiedEntry
, but I don't think multiple can coexist (due to mutable aliasing of the table) as Iterator
requires.
So yeah, a retain
which handles entries one-by-one internally is probably best.
It looks like the entry API might be usable for my other case if I write it differently than I was planning. I seem to be doing that a lot since I started Rust.
Unless someone comes up with some reason why this is a horrible idea in the next few days, I'll go ahead and make an RFC for it.
1 Like
retain() has been added to HashMap in unstable HashSet in std::collections - Rust