gpt4 book ai didi

rust - 如何将迭代器的每个元素重复 n 次?

转载 作者:行者123 更新时间:2023-12-03 11:27:27 31 4
gpt4 key购买 nike

我目前正在学习 Rust,我偶然发现了一个操作,我在 std 中既找不到标准实现,也找不到合理形成的代码片段,它可以做我想做的事情。

基本上,我想将迭代器的每个元素重复给定次数。例如,如果 a 有一个 [1,2,3] 的迭代器,那么通过重复每个元素 3 次,例如我的意思是输出应该是 [1,1,1,2 ,2,2,3,3,3].

如何在 Rust 中惯用地做到这一点?

最佳答案

您可以使用 repeat(n).take(n) 重复单个元素和 flat_map将这些重复组合成一个平面迭代器:

let it = vec![1, 2, 3].into_iter();
let repeated = it.flat_map(|n| std::iter::repeat(n).take(3));
assert!(repeated.collect::<Vec<_>>() == vec![1, 1, 1, 2, 2, 2, 3, 3, 3]);

将任何迭代器转换为重复迭代器的通用版本可能如下所示(playground):

fn repeat_element<T: Clone>(it: impl Iterator<Item = T>, cnt: usize) -> impl Iterator<Item = T> {
it.flat_map(move |n| std::iter::repeat(n).take(cnt))
}

关于rust - 如何将迭代器的每个元素重复 n 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66482699/

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