在下面的片段中:
let b: Vec<usize> = a.iter().filter(|x| **x > 5).map(|x| *x).collect();
有没有更好的方法让 b
成为值向量而不是引用? (而不是 .map(|x| *x)
)
是否有类似的东西:
fn iter_values<T : Copy>(c: &Vec<T>) -> std::iter::Map<std::slice::Iter<T>, fn(&T) -> T> {
c.iter().map(|x| *x)
}
可以这样使用:
let b: Vec<usize> = iter_values(&a).filter(|x| *x > 5).collect();
最佳答案
使用.copied
:
let b: Vec<usize> = a.iter().copied().filter(|x| *x > 5).collect();
或者您可以使用 .cloned
它适用于实现 Clone
的任何类型,但请注意,这可能会导致通过克隆将引用转换为对象的不小成本。
关于rust - 在 ".map(|x| *x)"之前是否有更好的 ".collect()"替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70328541/