當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。