代码之家  ›  专栏  ›  技术社区  ›  ZNackasha

从Ref Counted times的Vec克隆到object的Vec

  •  1
  • ZNackasha  · 技术社区  · 6 年前

    我现在有一个 Vec<Rc<Item>> 我非常想有一个 Vec<Item> 其中每个Rc项都被克隆到新的Vec中。我如何做到这一点?

    2 回复  |  直到 6 年前
        1
  •  4
  •   Sven Marnach    6 年前

    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();
    

    类型 s 在结尾是 &Rc<String> . 只要取消一次引用,就可以 Rc<String> String . 为调用隐式地重新生成字符串 克隆() ,返回字符串的副本。

        2
  •  1
  •   PitaJ    6 年前

    如果要避免克隆任何内容,并且数组中的每个值只有一个引用,那么只需打开 Rc 学生:

    use std::rc::Rc;
    
    fn main() {
        let strs = vec![Rc::new("aghaj".to_string()); 7];
    
        println!("{:?}", strs);
    
        let unwrapped: Vec<_> = strs
            .into_iter()
            .map(|x| Rc::try_unwrap(x).unwrap())
            .collect();
    
        println!("{:?}", unwrapped);
    }