-
Notifications
You must be signed in to change notification settings - Fork 1.6k
RFC: get collection keys #1175
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RFC: get collection keys #1175
Conversation
For clarity, it would be great if this RFC could include the signatures for the new methods, even if the names are still being bikeshedded. |
And could this also mention the following potential additions to the impl<'a, K, V> OccupiedEntry<'a, K, V> {
fn key(&self) -> &K;
fn keyed_remove(self) -> (K, V);
fn keyed_get_mut(&mut self) -> (&K, &mut V);
fn keyed_get(&self) -> (&K, &V);
} The last method isn't strictly necessary, but is provided for consistency with impl<'a, K, V> OccupiedEntry<'a, K, V> {
fn keyed_into_mut(self) -> (&'a K, &'a mut V);
} |
consistency is unclear since it would only apply for `usize`: | ||
|
||
* std::collections::VecMap | ||
* std::collections::BitSet |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These types are slated for deprecation. Regardless, this RFC is proposing a standard map/set API, and as such all maps/sets should implement them unless infeasible.
It's really too bad that we can't change fn get<Q>(&self, key: &Q) -> Option<&V>; to fn get<Q>(&self, key: &Q) -> Option<(&K, &V)>; due to backwards compatibility concerns. Instead, we're going to end up with an explosion of method variants when this change would subsume all uses. I guess a future |
Thanks for the feedback, @gankro. I'll update the PR when I get a chance. One thing I'm not certain is the Entry API. The Entry receives a new Key and the HashMap may already have a Key that's equal to the new one. In that case, which key should be exposed, the existing one or the one used to create the Entry? |
I don't think I can make this happen. Someone else should take care of this if desired. |
I may be interested in taking this over. |
I'm working on this at https://github.com/apasel422/rfcs/blob/collection-keys/text/0000-collection-keys.md. |
What's the state of this? Does it still need revision with @gankro 's comments? @apasel422, your link is broken. Completeness appears to demand a lot of extra functions. I don't know how far it's worth pursuing completeness. For what it's worth, all I want is |
This was partially addressed by RFC 1194. |
I would also like this, although my use case is mostly "as a newbie I'm confused why this doesn't exist." I am trying to use Rc and want to clone the key for correctness, but can't. |
Rendered
cc @gankro @alexcrichton