从 Ref Counted 的 Vec 克隆到对象的 vec

Gil*_*h22 2 rust

我目前有一个Vec<Rc<Item>>,我非常希望有一个Vec<Item>,其中每个 Rc 项目都被克隆到新的 Vec 中。我该如何实现?

Sve*_*ach 5

您可以iter().map(...).collect()为此使用通常的模式。在地图内部,您需要Rc通过先取消引用然后调用来创建内部项目的克隆clone()

let v: Vec<_> = (0..10).map(|_| Rc::new(String::from("a"))).collect();
let v: Vec<_> = v.iter().map(|s| (**s).clone()).collect();
Run Code Online (Sandbox Code Playgroud)

s闭包中的类型是&Rc<String>。通过取消引用一次,您将获得Rc<String>. 通过再次取消引用,您将获得一个String. 为调用 隐式重新借用该字符串,该调用clone()返回该字符串的副本。