Is there an idiomatic way to take any value from a HashMap (I don't care which one). None if HashMap is empty.
This function would have type signature
&mut self -> Option<(K, V)>. I searched HashMap in std::collections - Rust but found
pub fn remove_entry<Q: ?Sized>(&mut self, k: &Q) -> Option<(K, V)> which requires a key.
Context: I'm using a HashMap to represent a set of named consumers; and when something is ready, I want to send it to some consumer, I don't care which one.
If your key can be cheaply cloned, you could call
keys().next(), then clone and remove it.
Do you still need the map to be otherwise usable as a normal map when you're in this phase? If you're allowed to fully consume it, then you can just keep its
IntoIter and pick off items one by one.
I forgot to state: I also need to be able to add to this HashMap as well; so the ops are :
- add new named consumer
- remove some consumer (don't care which key)
- remove particular consumer (by key)
If it doesn't have to be
HashMap exactly, then you could use
IndexMap and its
pop() method. You can also use
swap_remove_index on a randomly chosen index in
0..len(), if you don't want to be biased toward the last insertion.