如何解决从HashSet中删除任何元素并获得所有权随机顺序很好
如何从Rust中的HashSet
中删除元素并获得其所有权?我知道所选元素将具有伪随机顺序,这很好。
目前,我正在这样做:
use std::collections::HashSet;
fn main() {
let mut items = HashSet::new();
items.insert("foo".to_string());
items.insert("bar".to_string());
items.insert("baz".to_string());
let item = items.iter().next().unwrap().clone();
items.remove(&item);
}
有没有一种方法可以使我最终摆脱.clone()
?问题的症结在于HashSet::remove
不会返回拥有的已删除值,而是返回bool
。
编辑:我忘了提(如果不够明显的话),之后我需要访问拥有的价值。
编辑2 :我不能使用take
,因为要使用它,我需要获取一个我不知道的值!我认为this playground可以更清楚地说明我的意思。 (它甚至无法编译)
解决方法
您可以使用其他Vec
之类的容器吗?有一个内置功能pop()
可以满足您的要求。如果您想要唯一的值,则不必坚持使用HashSet
。
将所有值插入HashSet
后,您可以将其转换为Vec
,然后执行所需的操作。弹出值,并拥有它,向量的其余部分仍然存在。如果您愿意,可以在完成所有操作后将Vec
转换回HashSet
。
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=705bf09cad3b6940c2a7ab0b19bbf78f
如果您必须在各处使用HashSet
,我想您将不得不使用into_iter()
来使用它,获取您的价值,并将迭代器转换回HashSet
,我认为这种方式效率不高。
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=e7295e7ea720994d1ab8d199ebd23a8d
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。