微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从HashSet中删除任何元素并获得所有权随机顺序很好

如何解决从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);
}

Playground Link

有没有一种方法可以使我最终摆脱.clone()?问题的症结在于HashSet::remove不会返回拥有的已删除值,而是返回bool

编辑:我忘了提(如果不够明显的话),之后我需要访问拥有的价值。

编辑2 :我不能使用take,因为要使用它,我需要获取一个我不知道的值!我认为this playground可以更清楚地说明我的意思。 (它甚至无法编译)

解决方法

您可以使用其他Vec之类的容器吗?有一个内置功能pop()可以满足您的要求。如果您想要唯一的值,则不必坚持使用HashSet

将所有值插入HashSet后,您可以将其转换为Vec,然后执行所需的操作。弹出值,并拥有它,向量的其余部分仍然存在。如果您愿意,可以在完成所有操作后将Vec转换回HashSethttps://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 举报,一经查实,本站将立刻删除。