Rust:折叠一组元组
Rust: Folding a set of tuples
我正在做一个宠物项目,我发现自己有一个 HashSet 元组。具体
HashSet<(String,generic_array::GenericArray<u8,generic_array::typenum::U32>, u64)>
我想对 u64 元素求和,并且可以毫无问题地使用 for 循环进行求和:
for element in hashset{
sum = sum+element.2;
}
但是,我遇到了集合的折叠函数并且我写了:
let y = hashset.fold(0, |sum x| sum+x)
哪个有效,但我不清楚 |sum x|
的语法。我可以推断我只是在命名变量,但我不明白我将如何对此进行扩展。另外,fold 如何知道要对元组的哪个元素进行操作?
你真的应该展示一个最小的、完整的、可验证的例子。
首先,我建议您阅读 Rust 这本书。它真的很好,会向您展示 Rust 的基础知识,尤其是迭代器,这似乎是您的问题。
此外,the documentation of the fold
function可能对您有很大帮助。
我从上面简化了你的例子,因为我不知道 generic_array::GenericArray<u8, generic_array::typenum::U32>
类型,所以我删除了它,假设你想总结元组中的 u64
:
use std::collections::HashSet;
#[allow(unused_variables)]
fn main() {
let values: HashSet<(String, u64)> = HashSet::new();
let sum = values.iter().fold(0, |acc, x| acc + x.1);
}
x.1
语法访问元组的第二个元素(从零开始计数)。在你的情况下是 x.2
,因为你有三个元素。
fold
方法采用初始值(在我的示例中为 0
)和一个闭包。
您示例中的闭包不是有效的 Rust 代码(它缺少参数之间的逗号),因此无法编译。继续阅读 Iterator::fold
函数的工作原理,您就会明白它是如何工作的。
我正在做一个宠物项目,我发现自己有一个 HashSet 元组。具体
HashSet<(String,generic_array::GenericArray<u8,generic_array::typenum::U32>, u64)>
我想对 u64 元素求和,并且可以毫无问题地使用 for 循环进行求和:
for element in hashset{
sum = sum+element.2;
}
但是,我遇到了集合的折叠函数并且我写了:
let y = hashset.fold(0, |sum x| sum+x)
哪个有效,但我不清楚 |sum x|
的语法。我可以推断我只是在命名变量,但我不明白我将如何对此进行扩展。另外,fold 如何知道要对元组的哪个元素进行操作?
你真的应该展示一个最小的、完整的、可验证的例子。
首先,我建议您阅读 Rust 这本书。它真的很好,会向您展示 Rust 的基础知识,尤其是迭代器,这似乎是您的问题。
此外,the documentation of the fold
function可能对您有很大帮助。
我从上面简化了你的例子,因为我不知道 generic_array::GenericArray<u8, generic_array::typenum::U32>
类型,所以我删除了它,假设你想总结元组中的 u64
:
use std::collections::HashSet;
#[allow(unused_variables)]
fn main() {
let values: HashSet<(String, u64)> = HashSet::new();
let sum = values.iter().fold(0, |acc, x| acc + x.1);
}
x.1
语法访问元组的第二个元素(从零开始计数)。在你的情况下是 x.2
,因为你有三个元素。
fold
方法采用初始值(在我的示例中为 0
)和一个闭包。
您示例中的闭包不是有效的 Rust 代码(它缺少参数之间的逗号),因此无法编译。继续阅读 Iterator::fold
函数的工作原理,您就会明白它是如何工作的。