#clone #iterator #object #zip #cloned #iteration #repeately

zip_clone

将迭代器压缩成重复克隆的对象

2 个版本

0.1.1 2024 年 6 月 18 日
0.1.0 2024 年 4 月 20 日

#752Rust 模式


3 个crate中使用 (通过 typle)

MIT/Apache

9KB
172

zip_clone

将迭代器压缩成重复克隆的对象。

传递一个实现了 Clone 的所有权对象,以创建一个迭代器,该迭代器将原始迭代器与对象的克隆组合。

一次迭代返回原始对象,因此比 iter.zip(repeat_with(|| cloned.clone())) 少一个克隆。

这对于每次迭代都克隆一个值但迭代后不使用的循环很有用。

而不是使用

let mut v = vec![];
let s = String::from("Hello");
for _ in 0..10 {
    v.push(s.clone());
}

使用

use zip_clone::ZipClone as _;

let mut v = vec![];
let s = String::from("Hello");
for (_, s) in (0..10).zip_clone(s) {
    v.push(s);
}

如果跳过了项目,对象可能被克隆得更少。例如,last() 消耗迭代器,但返回最后一个值,而不对中间值克隆对象

use zip_clone::ZipClone as _;

let mut v = vec![];
let s = String::from("Hello");
v.push((0..10).zip_clone(s).last());

无运行时依赖