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