如何计算结构体数组所有键的总和?及Rust中一行代码求Vec字段和?
解答
问题2:Rust中一行代码计算Vec<MyStruct>的myvalue总和
这事儿用Rust的迭代器链就能轻松搞定,完全符合你要的一行代码需求:
let total_myvalue: u32 = a.iter().map(|s| s.myvalue).sum();
拆解一下逻辑:
a.iter():创建一个遍历数组元素的不可变迭代器,避免移动原数组的所有权map(|s| s.myvalue):把每个MyStruct实例转换成它的myvalue字段值sum():自动累加所有转换后的u32数值,这里显式指定: u32是因为Rust需要明确求和的目标类型
嫌类型标注啰嗦?还可以用 turbofish 语法简写:
let total_myvalue = a.iter().map(|s| s.myvalue).sum::<u32>();
问题1:通用场景下计算结构体数组中所有字段的总和
如果你的“所有键的总和”是指每个结构体的所有数值字段先相加,再把整个数组的结果累加,核心思路是先处理单个结构体的字段求和,再汇总整个数组。
还是拿Rust举例子(延续你第二个问题的语境),先给结构体加一个计算自身字段总和的方法:
struct MyStruct { myvalue: u32, yourvalue: u32, } impl MyStruct { fn all_fields_sum(&self) -> u32 { self.myvalue + self.yourvalue } }
然后同样用迭代器一行完成数组总和计算:
let total_all_fields: u32 = a.iter().map(|s| s.all_fields_sum()).sum();
换成其他语言(比如Python)逻辑也一致:先写函数提取单个实例的所有字段值并求和,再用生成器表达式配合sum()函数完成汇总。
内容的提问来源于stack exchange,提问作者Slim Shady
相关产品推荐
相关产品推荐

