Struct std::iter::Peekable 1.0.0[−][src]
#[must_use = "iterators are lazy and do nothing unless consumed"]pub struct Peekable<I> where
I: Iterator, { /* fields omitted */ }
Expand description
Implementations
在不推进迭代器的情况下,返回 next() 值的引用。
与 next
一样,如果有值,则将其包装在 Some(T)
中。
但是,如果迭代结束,则返回 None
。
因为 peek()
返回一个引用,并且许多迭代器迭代引用,所以返回值是双引用的情况可能会令人困惑。
您可以在下面的示例中看到这种效果。
Examples
基本用法:
let xs = [1, 2, 3]; let mut iter = xs.iter().peekable(); // peek() 让我们看看 future assert_eq!(iter.peek(), Some(&&1)); assert_eq!(iter.next(), Some(&1)); assert_eq!(iter.next(), Some(&2)); // 即使我们多次 `peek`,迭代器也不会前进 assert_eq!(iter.peek(), Some(&&3)); assert_eq!(iter.peek(), Some(&&3)); assert_eq!(iter.next(), Some(&3)); // 迭代器完成后,`peek()` 也是如此 assert_eq!(iter.peek(), None); assert_eq!(iter.next(), None);Run
返回 next() 值的变量引用,而无需前进迭代器。
与 next
一样,如果有值,则将其包装在 Some(T)
中。
但是,如果迭代结束,则返回 None
。
因为 peek_mut()
返回一个,并且许多迭代器迭代引用,所以返回值是双引用的情况可能会令人困惑。
您可以在下面的示例中看到这种效果。
Examples
基本用法:
let mut iter = [1, 2, 3].iter().peekable(); // 像 `peek()` 一样,我们可以在不推进迭代器的情况下查看 future。 assert_eq!(iter.peek_mut(), Some(&mut &1)); assert_eq!(iter.peek_mut(), Some(&mut &1)); assert_eq!(iter.next(), Some(&1)); // 查看迭代器并设置可变引用背后的值。 if let Some(p) = iter.peek_mut() { assert_eq!(*p, &2); *p = &5; } // 随着迭代器的继续,我们输入的值会重新出现。 assert_eq!(iter.collect::<Vec<_>>(), vec![&5, &3]);Run
如果条件为真,则使用并返回此迭代器的下一个值。
如果 func
返回 true
作为此迭代器的下一个值,请消耗并返回它。
否则,返回 None
。
Examples
如果它等于 0,则使用一个数字。
let mut iter = (0..5).peekable(); // 迭代器的第一个项是 0; 消耗它。 assert_eq!(iter.next_if(|&x| x == 0), Some(0)); // 现在返回的下一个项为 1,因此 `consume` 将返回 `false`。 assert_eq!(iter.next_if(|&x| x == 0), None); // `next_if` 如果下一个项目的值不等于 `expected`,则保存该值。 assert_eq!(iter.next(), Some(1));Run
消费小于 10 的任何数字。
let mut iter = (1..20).peekable(); // 消耗所有小于 10 的数字 while iter.next_if(|&x| x < 10).is_some() {} // 返回的下一个值将是 10 assert_eq!(iter.next(), Some(10));Run
消费并返回下一个等于 expected
的项。
Example
如果它等于 0,则使用一个数字。
let mut iter = (0..5).peekable(); // 迭代器的第一个项是 0; 消耗它。 assert_eq!(iter.next_if_eq(&0), Some(0)); // 现在返回的下一个项为 1,因此 `consume` 将返回 `false`。 assert_eq!(iter.next_if_eq(&0), None); // `next_if_eq` 如果下一个项目的值不等于 `expected`,则保存该值。 assert_eq!(iter.next(), Some(1));Run
Trait Implementations
一个迭代器方法,它只要成功返回就应用函数,并产生单个最终值。 Read more
通过应用操作将每个元素 fold
到一个累加器中,返回最终结果。 Read more
🔬 This is a nightly-only experimental API. (iter_advance_by
#77404)
recently added
通过 n
元素使迭代器前进。 Read more
创建一个从同一点开始的迭代器,但在每次迭代时以给定的数量逐步执行。 Read more
接受两个迭代器,并依次在两个迭代器上创建一个新的迭代器。 Read more
将两个迭代器压缩为成对的单个迭代器。 Read more
fn intersperse(self, separator: Self::Item) -> Intersperse<Self>ⓘNotable traits for Intersperse<I>impl<I> Iterator for Intersperse<I> where
I: Iterator,
<I as Iterator>::Item: Clone, type Item = <I as Iterator>::Item;
where
Self::Item: Clone,
[src]
fn intersperse(self, separator: Self::Item) -> Intersperse<Self>ⓘNotable traits for Intersperse<I>impl<I> Iterator for Intersperse<I> where
I: Iterator,
<I as Iterator>::Item: Clone, type Item = <I as Iterator>::Item;
where
Self::Item: Clone,
[src]impl<I> Iterator for Intersperse<I> where
I: Iterator,
<I as Iterator>::Item: Clone, type Item = <I as Iterator>::Item;
🔬 This is a nightly-only experimental API. (iter_intersperse
#79524)
recently added
创建一个新的迭代器,该迭代器将 separator
的副本放置在原始迭代器的相邻项之间。 Read more
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>ⓘNotable traits for IntersperseWith<I, G>impl<I, G> Iterator for IntersperseWith<I, G> where
I: Iterator,
G: FnMut() -> <I as Iterator>::Item, type Item = <I as Iterator>::Item;
where
G: FnMut() -> Self::Item,
[src]
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>ⓘNotable traits for IntersperseWith<I, G>impl<I, G> Iterator for IntersperseWith<I, G> where
I: Iterator,
G: FnMut() -> <I as Iterator>::Item, type Item = <I as Iterator>::Item;
where
G: FnMut() -> Self::Item,
[src]impl<I, G> Iterator for IntersperseWith<I, G> where
I: Iterator,
G: FnMut() -> <I as Iterator>::Item, type Item = <I as Iterator>::Item;
🔬 This is a nightly-only experimental API. (iter_intersperse
#79524)
recently added
创建一个新的迭代器,该迭代器将 separator
生成的项放在原始迭代器的相邻项之间。 Read more
获取一个闭包并创建一个迭代器,该迭代器在每个元素上调用该闭包。 Read more
创建一个迭代器,该迭代器使用闭包确定是否应产生元素。 Read more
创建一个同时过滤和 maps 的迭代器。 Read more
创建一个迭代器,该迭代器给出当前迭代次数以及下一个值。 Read more
创建一个迭代器,该迭代器根据谓词产生元素。 Read more
🔬 This is a nightly-only experimental API. (iter_map_while
#68537)
recently added
创建一个迭代器,该迭代器均基于谓词和 maps 产生元素。 Read more
创建一个跳过前 n
个元素的迭代器。 Read more
创建一个迭代器,它产生第一个 n
元素,如果底层迭代器提前结束,则产生更少的元素。 Read more
创建一个迭代器,其工作方式类似于 map,但是将嵌套的结构展平。 Read more
创建一个可简化嵌套结构体的迭代器。 Read more
对迭代器的每个元素执行某些操作,将值传递给它。 Read more
#[must_use = "if you really need to exhaust the iterator, consider `.for_each(drop)` instead"]fn collect<B>(self) -> B where
B: FromIterator<Self::Item>,
[src]
#[must_use = "if you really need to exhaust the iterator, consider `.for_each(drop)` instead"]fn collect<B>(self) -> B where
B: FromIterator<Self::Item>,
[src]将迭代器转换为集合。 Read more
使用一个迭代器,从中创建两个集合。 Read more
fn partition_in_place<'a, T, P>(self, predicate: P) -> usize where
Self: DoubleEndedIterator<Item = &'a mut T>,
T: 'a,
P: FnMut(&T) -> bool,
[src]
fn partition_in_place<'a, T, P>(self, predicate: P) -> usize where
Self: DoubleEndedIterator<Item = &'a mut T>,
T: 'a,
P: FnMut(&T) -> bool,
[src]🔬 This is a nightly-only experimental API. (iter_partition_in_place
#62543)
new API
根据给定的谓词,对迭代器的元素进行就地重新排序,以使所有返回 true
的元素都在所有返回 false
的元素之前。
返回找到的 true
元素的数量。 Read more
🔬 This is a nightly-only experimental API. (iter_is_partitioned
#62544)
new API
检查此迭代器的元素是否根据给定的谓词进行了分区,以便所有返回 true
的元素都在所有返回 false
的元素之前。 Read more
一个迭代器方法,该方法将一个容易犯错的函数应用于迭代器中的每个项,在第一个错误处停止并返回该错误。 Read more
通过重复应用归约运算,将元素缩减为一个。 Read more
测试迭代器的每个元素是否与谓词匹配。 Read more
测试迭代器的任何元素是否与谓词匹配。 Read more
搜索满足谓词的迭代器的元素。 Read more
将函数应用于迭代器的元素,并返回第一个非无结果。 Read more
🔬 This is a nightly-only experimental API. (try_find
#63178)
new API
将函数应用于迭代器的元素,并返回第一个真结果或第一个错误。 Read more
在迭代器中搜索元素,并返回其索引。 Read more
fn rposition<P>(&mut self, predicate: P) -> Option<usize> where
Self: ExactSizeIterator + DoubleEndedIterator,
P: FnMut(Self::Item) -> bool,
[src]
fn rposition<P>(&mut self, predicate: P) -> Option<usize> where
Self: ExactSizeIterator + DoubleEndedIterator,
P: FnMut(Self::Item) -> bool,
[src]从右侧搜索迭代器中的元素,并返回其索引。 Read more
返回给出指定函数最大值的元素。 Read more
返回给出相对于指定比较函数的最大值的元素。 Read more
返回给出指定函数中最小值的元素。 Read more
返回给出相对于指定比较函数的最小值的元素。 Read more
反转迭代器的方向。 Read more
将成对的迭代器转换为一对容器。 Read more
创建一个迭代器,该迭代器将复制其所有元素。 Read more
创建一个迭代器,该迭代器将克隆所有元素。 Read more
不断重复的迭代器。 Read more
Lexicographically 将此 Iterator
的元素与另一个元素进行比较。 Read more
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering where
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,
I: IntoIterator,
[src]
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering where
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,
I: IntoIterator,
[src]Lexicographically 就指定的比较函数而言,将此 Iterator
的元素与另一个元素进行比较。 Read more
fn partial_cmp<I>(self, other: I) -> Option<Ordering> where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0[src]
fn partial_cmp<I>(self, other: I) -> Option<Ordering> where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0[src]Lexicographically 将此 Iterator
的元素与另一个元素进行比较。 Read more
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering> where
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
I: IntoIterator,
[src]
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering> where
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
I: IntoIterator,
[src]Lexicographically 就指定的比较函数而言,将此 Iterator
的元素与另一个元素进行比较。 Read more
fn eq<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
1.5.0[src]
fn eq<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
1.5.0[src]fn eq_by<I, F>(self, other: I, eq: F) -> bool where
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,
I: IntoIterator,
[src]
fn eq_by<I, F>(self, other: I, eq: F) -> bool where
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,
I: IntoIterator,
[src]fn ne<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
1.5.0[src]
fn ne<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
1.5.0[src]fn lt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0[src]
fn lt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0[src]fn le<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0[src]
fn le<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0[src]fn gt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0[src]
fn gt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0[src]fn ge<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0[src]
fn ge<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0[src]🔬 This is a nightly-only experimental API. (is_sorted
#53485)
new API
检查此迭代器的元素是否使用给定的比较器函数进行排序。 Read more
fn is_sorted_by_key<F, K>(self, f: F) -> bool where
F: FnMut(Self::Item) -> K,
K: PartialOrd<K>,
[src]
fn is_sorted_by_key<F, K>(self, f: F) -> bool where
F: FnMut(Self::Item) -> K,
K: PartialOrd<K>,
[src]🔬 This is a nightly-only experimental API. (is_sorted
#53485)
new API
检查此迭代器的元素是否使用给定的键提取函数进行排序。 Read more