首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一个迭代器方法接受一个谓词并返回一个索引和匹配元素?

是否有一个迭代器方法接受一个谓词并返回一个索引和匹配元素?
EN

Stack Overflow用户
提问于 2022-08-21 18:14:11
回答 1查看 99关注 0票数 0

我在寻找这样的东西:

代码语言:javascript
复制
let iter = vec![1, 2, 40, 3].into_iter();
let (pos, elt) = iter.position_find(|&x| x > 10);
//                    ^ does not exist

println!("{pos} {elt}"); // 2 40

Iterator::positionIterator::find都提前了迭代器,所以除非我克隆迭代器,否则我不能同时使用这两种迭代器,这在这里是不必要的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-21 18:19:00

您可以将findenumerate一起使用。

代码语言:javascript
复制
let iter = vec![1, 2, 40, 3].into_iter();
if let Some((pos, elt)) = iter.enumerate().find(|(i, x)| x > &10) {
    println!("{pos} {elt}"); // 2 40
}

如果您不想每次写出来,您甚至可以将其转换为可拓性状,以便在所有迭代器上自动将其实现为方法:

代码语言:javascript
复制
trait FindPosition: Iterator {
    fn find_position<F: FnMut(usize, &Self::Item) -> bool>(
        &mut self,
        mut f: F,
    ) -> Option<(usize, Self::Item)> {
        self.enumerate().find(|(i, item)| f(*i, item))
    }
}

impl<I: Iterator> FindPosition for I {}

fn main() {
    let mut iter = vec![1, 2, 40, 3].into_iter();
    if let Some((pos, elt)) = iter.find_position(|_, x| *x > 10) {
        println!("{pos} {elt}"); // 2 40
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73437109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档