gpt4 book ai didi

iterator - 在 Rust 中重用迭代器的最有效方法是什么?

转载 作者:行者123 更新时间:2023-11-29 07:47:10 25 4
gpt4 key购买 nike

我想重复使用我制作的迭代器,以避免从头开始重新创建它。但迭代器似乎无法克隆collect move 迭代器,所以我无法重用它。

这或多或少相当于我正在尝试做的事情。

let my_iter = my_string.unwrap_or("A").chars().flat_map(|c|c.to_uppercase()).map(|c| Tag::from(c).unwrap() );
let my_struct = {
one: my_iter.collect(),
two: my_iter.map(|c|{(c,Vec::new())}).collect(),
three: my_iter.filter_map(|c|if c.predicate(){Some(c)}else{None}).collect(),
four: my_iter.map(|c|{(c,1.0/my_float)}).collect(),
five: my_iter.map(|c|(c,arg_time.unwrap_or(time::now()))).collect(),
//etc...
}

最佳答案

您应该在优化某些东西之前进行概要分析,否则您最终可能会使事情变得比他们需要的更慢和更复杂。

你例子中的迭代器

let my_iter = my_string.unwrap_or("A").chars().flat_map(|c|c.to_uppercase()).map(|c| Tag::from(c).unwrap() );

是分配在堆栈上的精简结构。克隆它们并不比从头构建它们便宜多少。

使用 .chars().flat_map(|c| c.to_uppercase()) 构造一个迭代器只需要一个纳秒,当我 benchmark

根据相同的基准,将迭代器创建包装在闭包中比简单地就地构建迭代器需要更多时间。

克隆 Vec 迭代器并不比就地构建快多少,两者几乎都是即时的。

test construction_only    ... bench:           1 ns/iter (+/- 0)
test inplace_construction ... bench: 249 ns/iter (+/- 20)
test closure ... bench: 282 ns/iter (+/- 18)
test vec_inplace_iter ... bench: 0 ns/iter (+/- 0)
test vec_clone_iter ... bench: 0 ns/iter (+/- 0)

关于iterator - 在 Rust 中重用迭代器的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35402244/

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