gpt4 book ai didi

rust - 我可以从 &[u32] 中过滤出特定的数字并将其转换为 Vec 吗?

转载 作者:行者123 更新时间:2023-11-29 08:13:08 24 4
gpt4 key购买 nike

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

最佳答案

您可以使用 filter_map filtermap 一步到位。

fn make_vec_of_nonzero(factors: &[u32]) -> Vec<u32> {
factors
.iter()
.filter_map(|&x| if x == 0 { None } else { Some(x) })
.collect()
}

关于rust - 我可以从 &[u32] 中过滤出特定的数字并将其转换为 Vec<u32> 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58685861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com