What is the canonical way to implement is_empty for Iterator?

后端 未结 2 536
轻奢々
轻奢々 2020-12-11 01:39

I have something that implements std::iter::Iterator and I want to know if there are > 0 elements. What is the standard way to do it? coun

2条回答
  •  余生分开走
    2020-12-11 02:08

    I would write iter.next().is_some().

    However, you need to be aware that doing this advances the iterator.

    fn main() {
        let scores = [1, 2, 3];
        let mut iter = scores.iter();
    
        println!("{}", iter.next().is_some()); // true
        println!("{}", iter.next().is_some()); // true
        println!("{}", iter.next().is_some()); // true
        println!("{}", iter.next().is_some()); // false
    }
    

    In many cases I'd use Peekable:

    fn main() {
        let scores = [1, 2, 3];
        let mut iter = scores.iter().peekable();
    
        println!("{}", iter.peek().is_some()); // true
        println!("{}", iter.peek().is_some()); // true
        println!("{}", iter.peek().is_some()); // true
        println!("{}", iter.peek().is_some()); // true
    }
    

    so a future reader can understand on sight

    I'd add a method on iterator named is_empty.

提交回复
热议问题