【问题标题】:How do I compute the dot product of two Rust arrays / slices / vectors?如何计算两个 Rust 数组/切片/向量的点积?
【发布时间】:2015-08-06 00:28:53
【问题描述】:

我试图找到两个向量的点积:

fn main() {
    let a = vec![1, 2, 3, 4];
    let b = a.clone();
    let r = a.iter().zip(b.iter()).map(|x, y| Some(x, y) => x * y).sum();
    println!("{}", r);
}

这失败了

error: expected one of `)`, `,`, `.`, `?`, or an operator, found `=>`
 --> src/main.rs:4:58
  |
4 |     let r = a.iter().zip(b.iter()).map(|x, y| Some(x, y) => x * y).sum();
  |                                                          ^^ expected one of `)`, `,`, `.`, `?`, or an operator here

这些我也试过了,都失败了:

let r = a.iter().zip(b.iter()).map(|x, y| => x * y).sum();
let r = a.iter().zip(b.iter()).map(Some(x, y) => x * y).sum();

这样做的正确方法是什么?

(Playground)

【问题讨论】:

    标签: rust


    【解决方案1】:

    map() 中,您不必处理迭代器返回Option 的事实。这由map() 负责。您需要提供一个函数来获取两个借来的值的元组。您第二次尝试很接近,但语法错误。这是正确的:

    a.iter().zip(b.iter()).map(|(x, y)| x * y).sum()
    

    您的最终程序需要在r 上添加注释:

    fn main() {
        let a = vec![1, 2, 3, 4];
        let b = a.clone();
    
        let r: i32 = a.iter().zip(b.iter()).map(|(x, y)| x * y).sum();
    
        println!("{}", r);
    }
    

    (Playground)

    另见:


    更多关于闭包的信息传递给map:我已经写了...map(|(x, y)| x * y),但是对于更复杂的操作,你需要用{}分隔闭包主体:

    .map(|(x, y)| {
        do_something();
        x * y
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多