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


Rust DoubleEndedIterator.rfold用法及代码示例


本文简要介绍rust语言中 std::iter::DoubleEndedIterator.rfold 的用法。

用法

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

一种迭代器方法,可将迭代器的元素从后面开始减少为单个最终值。

这是 Iterator::fold() 的反向版本:它从迭代器的后面开始获取元素。

rfold() 接受两个参数:一个初始值和一个带有两个参数的闭包:一个 'accumulator' 和一个元素。闭包返回累加器下一次迭代应具有的值。

初始值是累加器在第一次调用时将具有的值。

将此闭包应用于迭代器的每个元素后,rfold() 返回累加器。

此操作有时称为'reduce' 或'inject'。

每当你有一些东西的集合并想从中产生一个值时,折叠很有用。

注意:rfold()将元素组合在一个right-associative时尚。对于像这样的结合运算符+,元素组合的顺序并不重要,但对于非关联运算符,如-顺序会影响最终结果。为一个left-associative版本rfold(), 看std::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大神的英文原创作品 std::iter::DoubleEndedIterator.rfold。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。