Rust:折叠一组元组

Rust:折叠一组元组,rust,fold,Rust,Fold,我正在做一个宠物项目,我发现自己有一组元组。具体地 HashSet<(String,generic_array::GenericArray<u8,generic_array::typenum::U32>, u64)> 然而,我遇到了集合的fold函数,我已经编写了 let y = hashset.fold(0, |sum x| sum+x) 这是可行的,但我不清楚| sum x |的语法。我可以推断,我只是简单地命名变量,但我不明白我将如何在此基础上展开。另外,fol

我正在做一个宠物项目,我发现自己有一组元组。具体地

HashSet<(String,generic_array::GenericArray<u8,generic_array::typenum::U32>, u64)>
然而,我遇到了集合的fold函数,我已经编写了

let y = hashset.fold(0, |sum x| sum+x)

这是可行的,但我不清楚| sum x |的语法。我可以推断,我只是简单地命名变量,但我不明白我将如何在此基础上展开。另外,fold如何知道元组的哪个元素可以操作?

您真的应该展示一个最小、完整且可验证的示例

首先,我建议你读一读铁锈书。它非常好,将向您展示Rust的基础知识,尤其是迭代器,这似乎是您的问题所在

而且,可能会对你有很大帮助

我从上面简化了您的示例,因为我不知道
generic\u array::GenericArray
类型,所以我删除了它,假设您想从元组中总结
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);
}
使用std::collections::HashSet;
#[允许(未使用的_变量)]
fn main(){
let值:HashSet=HashSet::new();
设sum=values.iter().fold(0,| acc,x | acc+x.1);
}
x.1
语法访问元组的第二个元素(计数从零开始)。在你的例子中是
x.2
,因为你有三个元素。
fold
方法接受一个初始值(
0
,在我的示例中是`)和一个闭包


示例中的闭包不是有效的Rust代码(它缺少参数之间的逗号),因此无法编译。继续阅读
迭代器::fold
函数的工作原理,您将了解它是如何工作的。

| sum x |
是无效的语法。我邀请你写一篇关于你所拥有的东西的文章。。。它编译和运行的目的是。。。嗯。至于写一个合适的例子。。。我在问一个关于我不理解的每一段代码的问题。重写一些我不理解的东西可能不会产生更好的代码段。它不是这样工作的。询问者的工作是提供一个关于你所经历的最小但可重复的例子。我告诉你,你在问题中提出的东西不应该编译,所以你现在在问题中的东西不足以让我们理解这个问题。无论你是否理解它通常都是无关紧要的,在一个问题上工作是提问过程的一部分。另外,请包括你的编译器版本和工具链。明白了。我不确定x本身是元组的一个元素还是元组本身。非常感谢。
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);
}