微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何重复迭代器的每个元素n次?

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

基本上我想重复迭代器的每个元素给定的次数。因此,例如,如果 a 的迭代器为 [1,2,3],那么例如通过将每个元素重复 3 次,我的意思是输出应该是 [1,1,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,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))
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。