algorithm - Rust 有没有计算乘积之和的好方法?

标签 algorithm rust calculation

我是 Rust 新手,我正在寻找一种计算 Rust 中乘积之和的好方法。

我的意思是如果有一个像[3,4,5]这样的向量, 我想计算 (3 * 4) + (3 * 5) + (4 * 5)。

这是我的方法,

fn main() {
    let a = [3, 4, 5];
    assert_eq!(
        47,
        [3, 4, 5].iter().enumerate().fold(0, |mut s, (i, v)| {
            for ii in i + 1..a.len() {
                s += *v * a[ii];
            }
            s
        })
    );
}

如果您知道更好的,我很想知道!

最佳答案

您可以使用组合mapsum组合fold实现产品。

use itertools::Itertools;
fn main() {
    let a = [3, 4, 5];

    let b: i32 = a.iter().combinations(2).map(|x| x[0] * x[1]).sum();
    assert_eq!(b, 47);

    let c: i32 = a.iter().combinations(2).fold(0, |acc, x| acc + (x[0] * x[1]) );
    assert_eq!(c, 47);

}

playground

关于algorithm - Rust 有没有计算乘积之和的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70132570/

相关文章:

rust - 当所有权可能在运行时移动时,Rust 编译器如何知道何时调用 drop?

python - Python 中的整数与浮点乘法

c# - C# 中快速素性测试的示例代码

rust - 如何与 Rust 中的向量元素匹配?

algorithm - 我是否正确地实现了这个算法?

generics - 限制 Rust 结构体的泛型参数进行反序列化

javascript - 垂直 Javascript slider ,比它应该滑动的更多

python - 我如何总结 Django 模型的内容

algorithm - 这种场景下raft是怎么处理log的呢?

algorithm - 按位异或两个数字的结果是数字的和或差