gpt4 book ai didi

rust - 在不深度复制其元素的情况下分支迭代器

转载 作者:行者123 更新时间:2023-12-04 17:16:04 24 4
gpt4 key购买 nike

迭代器被map消耗,所以多次映射一个迭代器时需要clone(等于clone?)。我有以下代码:

fn main() {
let a: Vec<(&str, (&i32, &i32))> = vec![("0", (&0, &1)), ("1", (&2, &3))];
let iter = a.iter().map(|x| x.1 as (&i32, &i32));

// occur clone process on i32?
let xs: Vec<&i32> = iter.cloned().map(|(x, _)| x).collect();

let ys: Vec<&i32> = iter.map(|(_, y)| y).collect();
println!("{:?}", xs);
println!("{:?}", ys);
}

问题是 cloned 方法可能会深度复制整个迭代元素,即使元素包含不可变引用。克隆的元素是上面的 i32,但它实际上可能有大结构。当分支迭代器 iter 时,我想显式浅复制包含对 i32(实际上更大的结构)引用的元素。可能吗?

最佳答案

使用clone代替clone:

fn main() {
let a: Vec<(&str, (&i32, &i32))> = vec![("0", (&0, &1)), ("1", (&2, &3))];
let iter = a.iter().map(|x| x.1 as (&i32, &i32));

// occur clone process on i32?
let xs: Vec<&i32> = iter.clone().map(|(x, _)| x).collect();

let ys: Vec<&i32> = iter.map(|(_, y)| y).collect();
println!("{:?}", xs);
println!("{:?}", ys);
}

Playground

clone 克隆迭代器本身。同时 cloneddocumentation 克隆底层元素:

Cloned: An iterator that clones the elements of an underlying iterator.

关于rust - 在不深度复制其元素的情况下分支迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68701470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com