给定一个数组,我希望过滤掉数字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]
?
[u32]
是一个切片(slice),而不是一个数组。一个数组的写法是[u32; 42]
。请确保使用准确的术语。你可以构建一个数组,但不能构建一个切片(没有引用的情况下),你可以构建一个切片的引用,但不能单独构建一个切片。我给你一个切片,切片可以指向&[u32]
或[u32]
,但你可以构建一个&[u32]
,而不能构建一个[u32]
。 - Stargateurto_vec
方法来构建一个Vec<u32>
(参见 https://dev59.com/WFYN5IYBdhLWcg3wFky2)。 - trent