我有一个向量并尝试通过过滤创建一个新向量。它不起作用,我不知道为什么:
fn example(data: Vec<f64>, missing_value: f64) {
let dude = data
.iter()
.filter(|&x| *x != missing_value)
.collect::<Vec<f64>>();
}
Run Code Online (Sandbox Code Playgroud)
fn example(data: Vec<f64>, missing_value: f64) {
let dude = data
.iter()
.filter(|&x| *x != missing_value)
.collect::<Vec<f64>>();
}
Run Code Online (Sandbox Code Playgroud)
Cai*_*aio 10
for仅有一个实现FromIteratorVec,并且该实现收集T来自同一类型的值T,即不可能转换T为任意类型U并同时收集其元素。
在您的情况下,您希望将 的迭代器收集&f64到 的向量中f64,因此,您需要通过克隆/复制进行转换,然后收集。
self.data.iter().filter(|&&x| x != self.missing_value).cloned().collect::<Vec<f64>>();
Run Code Online (Sandbox Code Playgroud)
如果您拥有向量的所有权,则可以迭代f64而不是&f64使用into_iter。
self.data.into_iter().filter(|&x| x != self.missing_value).collect::<Vec<f64>>();
Run Code Online (Sandbox Code Playgroud)