如何计算两个 Rust 数组/切片/向量的点积?
How do I compute the dot product of two Rust arrays / slices / vectors?
我正在尝试求两个向量的点积:
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();
正确的做法是什么?
在map()
中,您不必处理迭代器returns和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);
}
另请参阅:
有关传递给 map
的闭包的更多信息:我已经写了 ...map(|(x, y)| x * y)
,但对于更复杂的操作,您需要使用 {}
分隔闭包主体:
.map(|(x, y)| {
do_something();
x * y
})
我正在尝试求两个向量的点积:
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();
正确的做法是什么?
在map()
中,您不必处理迭代器returns和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);
}
另请参阅:
有关传递给 map
的闭包的更多信息:我已经写了 ...map(|(x, y)| x * y)
,但对于更复杂的操作,您需要使用 {}
分隔闭包主体:
.map(|(x, y)| {
do_something();
x * y
})