当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust DoubleEndedIterator用法及代码示例


本文简要介绍rust语言中 Trait core::iter::DoubleEndedIterator 的用法。

用法

pub trait DoubleEndedIterator: Iterator {
    fn next_back(&mut self) -> Option<Self::Item>;

    fn advance_back_by(&mut self, n: usize) -> Result<(), usize> { ... }
    fn nth_back(&mut self, n: usize) -> Option<Self::Item> { ... }
    fn try_rfold<B, F, R>(&mut self, init: B, f: F) -> R    where        Self: Sized,        F: FnMut(B, Self::Item) -> R,        R: Try<Output = B>,
    { ... }
    fn rfold<B, F>(self, init: B, f: F) -> B    where        Self: Sized,        F: FnMut(B, Self::Item) -> B,
    { ... }
    fn rfind<P>(&mut self, predicate: P) -> Option<Self::Item>    where        Self: Sized,        P: FnMut(&Self::Item) -> bool,
    { ... }
}

能够从两端产生元素的迭代器。

实现 DoubleEndedIterator 的东西比实现 Iterator 的东西有一项额外的函数:能够从后面和前面获取 Item

需要注意的是,前后工作都在同一范围内进行,并且不会交叉:当它们在中间相遇时,迭代就结束了。

Iterator 协议类似,一旦 DoubleEndedIterator next_back() 返回 None ,再次调用它可能会或可能不会再次返回 Some 。为此目的, next() next_back() 可以互换。

例子

基本用法:

let numbers = vec![1, 2, 3, 4, 5, 6];

let mut iter = numbers.iter();

assert_eq!(Some(&1), iter.next());
assert_eq!(Some(&6), iter.next_back());
assert_eq!(Some(&5), iter.next_back());
assert_eq!(Some(&2), iter.next());
assert_eq!(Some(&3), iter.next());
assert_eq!(Some(&4), iter.next());
assert_eq!(None, iter.next());
assert_eq!(None, iter.next_back());

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Trait core::iter::DoubleEndedIterator。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。