gpt4 book ai didi

filter - 无法将过滤后的 Vec 收集到自身中

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

<分区>

我已经开始在 Rust 和 came across #3 中解决 Project Euler 问题最简单的快速方法是实现 Sieve of Eratosthenes .

这样做时,我的算法创建了一个迭代器,然后过滤掉非素数并将其分配回原始向量,但我收到一个错误 Vec<u32>无法从 Iterator<Item=&u32> 构建.


代码:

fn eratosthenes_sieve(limit: u32) -> Vec<u32> {
let mut primes: Vec<u32> = Vec::new();
let mut range: Vec<u32> = (2..=limit).collect();
let mut length = range.len();

loop {
let p = range[0];
primes.push(p);

range = range.iter().filter(|&n| *n % p != 0).collect();

if length == range.len() {
break;
}
length = range.len();
}

primes
}

错误:

error[E0277]: a collection of type `std::vec::Vec<u32>` cannot be built from an iterator over elements of type `&u32`
--> src\main.rs:42:55
|
42 | range = range.iter().filter(|&n| *n % p != 0).collect();
| ^^^^^^^ a collection of type `std::vec::Vec<u32>` cannot be built from `std::iter::Iterator<Item=&u32>`
|
= help: the trait `std::iter::FromIterator<&u32>` is not implemented for `std::vec::Vec<u32>`

为什么闭包将值包装在额外的借用中?

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