本文简要介绍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 DoubleEndedIterator.rfind用法及代码示例
- Rust DoubleEndedIterator.try_rfold用法及代码示例
- Rust DoubleEndedIterator.nth_back用法及代码示例
- Rust DoubleEndedIterator.advance_back_by用法及代码示例
- Rust DoubleEndedIterator.next_back用法及代码示例
- Rust DoubleEndedIterator用法及代码示例
- Rust DirBuilder.new用法及代码示例
- Rust DirEntry.metadata用法及代码示例
- Rust Duration.as_micros用法及代码示例
- Rust Duration.subsec_nanos用法及代码示例
- Rust DebugList.entries用法及代码示例
- Rust Duration.checked_add用法及代码示例
- Rust Div用法及代码示例
- Rust Drain.as_slice用法及代码示例
- Rust DirBuilder.recursive用法及代码示例
- Rust Duration.new用法及代码示例
- Rust DerefMut用法及代码示例
- Rust DirBuilder.create用法及代码示例
- Rust Drop用法及代码示例
- Rust DebugList用法及代码示例
- Rust DirEntry.path用法及代码示例
- Rust DebugMap.key用法及代码示例
- Rust Duration.subsec_micros用法及代码示例
- Rust DirEntry.file_type用法及代码示例
- Rust Duration.mul_f64用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 core::iter::DoubleEndedIterator.rfold。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。