结构体Var
的定义如下:
pub struct Var {
val: i32,
}
我希望将Var
数组中的所有val
相加:
pub struct Var {
val: i32,
}
fn main() {
let var0 = Var { val: 0 };
let var1 = Var { val: 1 };
let array = [var0, var1];
let sum = array.into_iter().reduce(|x, y| Var { val: x.val + y.val });
}
在我看来,这段代码是多余的,因为每次在reduce
中添加代码,都会创建一个新的Var
。我希望通过只添加val
来避免这种浪费,但这是不可能的:
let sum = array.into_iter().reduce(|x, y| x.val + y.val);
应为结构Var
,找到的是i32
另一种解决方法是从所有var
中获取val
,然后将它们相加,这看起来也不太明智:
let vals: Vec<i32> = array.into_iter().map(|var| var.val).collect();
let sum = vals.into_iter().reduce(|x, y| x + y);
有没有一种优雅而有效的方法来对结构体数组中的所有成员变量求和?
2条答案
按热度按时间owfi6suc1#
你可以链接迭代器而不需要
collect
中间结果:或者更好的方法是,使用
sum
代替reduce
,使用iter
代替into_iter
,这样就不会破坏原始阵列:另一个值得注意的选项是使用
fold
在单个调用中合并map
和sum
的效果:注意,
reduce
对于空数组返回None
,对于非空数组返回Some (sum)
,其他解决方案对于空数组返回0
,否则返回裸和。2vuwiymt2#
是的。你可以解构你的结构然后调用sum。
可以通过
fold
来缩短时间: