我正在做一个宠物项目,我发现自己有一个元组的哈希集。具体来说
HashSet<(String,generic_array::GenericArray<u8,generic_array::typenum::U32>, u64)>
Run Code Online (Sandbox Code Playgroud)
我想对 u64 元素求和,并且可以使用 for 循环来完成此操作,不会出现问题:
for element in hashset{
sum = sum+element.2;
}
Run Code Online (Sandbox Code Playgroud)
但是,我遇到了集合的折叠函数,并且我写了:
let y = hashset.fold(0, |sum x| sum+x)
Run Code Online (Sandbox Code Playgroud)
哪个有效,但我不清楚|sum x|. 我可以推断我只是简单地命名变量,但我不明白如何对此进行扩展。另外,fold 如何知道要对元组的哪个元素进行操作?
您确实应该展示一个最小的、完整的且可验证的示例。
首先,我建议你阅读 Rust 书。它真的很好,将向您展示 Rust 的基础知识,尤其是迭代器,这似乎是您的问题。
我简化了上面的示例,因为我不知道类型,所以我删除了它,假设您想从元组中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);
}
Run Code Online (Sandbox Code Playgroud)
该x.1语法访问元组的第二个元素(从零开始计数)。这就是x.2你的情况,因为你有三个要素。该fold方法采用一个初始值(0在我的示例中)和一个闭包。
您的示例中的闭包不是有效的 Rust 代码(它缺少参数之间的逗号),因此无法编译。继续阅读该Iterator::fold函数是如何工作的,您就会明白它是如何工作的。
| 归档时间: |
|
| 查看次数: |
6511 次 |
| 最近记录: |