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


Rust DoubleEndedIterator.rfold用法及代碼示例


本文簡要介紹rust語言中 core::iter::DoubleEndedIterator.rfold 的用法。

用法

fn rfold<B, F>(self, init: B, f: F) -> B where    Self: Sized,    F: FnMut(B, Self::Item) -> B,

一種迭代器方法,可將迭代器的元素從後麵開始減少為單個最終值。

這是 Iterator::fold() 的反向版本:它從迭代器的後麵開始獲取元素。

rfold() 接受兩個參數:一個初始值和一個帶有兩個參數的閉包:一個 'accumulator' 和一個元素。閉包返回累加器下一次迭代應具有的值。

初始值是累加器在第一次調用時將具有的值。

將此閉包應用於迭代器的每個元素後,rfold() 返回累加器。

此操作有時稱為'reduce' 或'inject'。

每當你有一些東西的集合並想從中產生一個值時,折疊很有用。

注意:rfold()將元素組合在一個right-associative時尚。對於像這樣的結合運算符+,元素組合的順序並不重要,但對於非關聯運算符,如-順序會影響最終結果。為一個left-associative版本rfold(), 看core::iter::Iterator.fold.

例子

基本用法:

let a = [1, 2, 3];

// the sum of all of the elements of a
let sum = a.iter()
           .rfold(0, |acc, &x| acc + x);

assert_eq!(sum, 6);

此示例演示了 rfold() 的 right-associative 特性:它構建一個字符串,從初始值開始,並從後麵到前麵的每個元素繼續:

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

let zero = "0".to_string();

let result = numbers.iter().rfold(zero, |acc, &x| {
    format!("({} + {})", x, acc)
});

assert_eq!(result, "(1 + (2 + (3 + (4 + (5 + 0)))))");

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 core::iter::DoubleEndedIterator.rfold。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。