给定一个&[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/

    10-13 04:46