我正在开展一个宠物项目,我发现自己有一个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 |的语法。我可以推断我只是命名变量,但我不明白我将如何扩展它。折叠如何知道要操作元组的哪个元素?
答案 0 :(得分:3)
你真的应该展示一个最小,完整和可验证的例子。
首先,我建议你阅读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
函数的工作原理,然后了解其工作原理。