给定一个&[u32]
我想过滤出0
这个数字。这可以是任何数字或任何其他规则或条件。
这里有一些可行的版本,但是我觉得这可以更简单地完成:
fn test(factors: &[u32]) {
let factors1 = factors
.iter()
.map(|&x| x as u32)
.filter(|x| *x != 0)
.collect::<Vec<u32>>();
let factors1 = factors
.iter()
.map(|&x| x as u32)
.filter(|&x| x != 0)
.collect::<Vec<u32>>();
let factors2 = factors
.iter()
.filter(|x| **x != 0)
.collect::<Vec<&u32>>();
let factors3 = factors
.iter()
.filter(|&&x| x != 0)
.collect::<Vec<&u32>>();
}
我期待像这样的更简单的方法(不起作用):let factors4 = factors.iter().filter(|x| x != 0).collect();
有帮助的事情是:&u32
克隆或转换为u32
? &[u32]
克隆为[u32]
? 最佳答案
至少有 Iterator.copied()
?
let factors4: Vec<u32> = factors
.iter()
.copied()
.filter(|&x| x != 0)
.collect();
关于rust - 我可以从&[u32]中滤除特定数字并将其转换为Vec <u32>吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58685861/