Rust语言是否有办法将函数应用于数组或向量中的每个元素?
我知道在Python中有map()
执行此任务的功能.中的R存在lapply()
,tapply()
和apply()
功能也做到这一点.
有没有一种既定的方法来渲染Rust中的函数?
Ste*_*nik 21
我们有Iterator::map
,所以你可以:
some_vec.iter().map(|x| /* do something here */)
Run Code Online (Sandbox Code Playgroud)
但是,Iterator
s很懒,所以这本身就不会做任何事情.你可以.collect()
在最后添加一个带有新元素的新向量,如果这是你想要的:
let some_vec = vec![1, 2, 3];
let doubled: Vec<_> = some_vec.iter().map(|x| x * 2).collect();
println!("{:?}", doubled);
Run Code Online (Sandbox Code Playgroud)
在不分配的情况下执行某些操作的标准方法是使用for
循环:
let some_vec = vec![1, 2, 3];
for i in &some_vec {
println!("{}", i);
}
Run Code Online (Sandbox Code Playgroud)
或者如果您想要修改值:
let mut some_vec = vec![1, 2, 3];
for i in &mut some_vec {
*i *= 2;
}
println!("{:?}", some_vec); // [2, 4, 6]
Run Code Online (Sandbox Code Playgroud)
如果您真的想要功能样式,可以使用foreach
itertools crate中的方法.
U00*_*07D 10
从Rust 1.21开始,该std::iter::Iterator
特征定义了一个for_each()
组合器,可用于将操作应用于集合中的每个元素.它是渴望(不是懒惰),所以collect()
不需要:
fn main() {
let mut vec = vec![1, 2, 3, 4, 5];
vec.iter_mut().for_each(|el| *el *= 2);
println!("{:?}", vec);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码打印[2, 4, 6, 8, 10]
到控制台.
归档时间: |
|
查看次数: |
9382 次 |
最近记录: |