gpt4 book ai didi

rust - Rust在给定一定范围的数字的情况下实现了一个简单的质数集合

转载 作者:行者123 更新时间:2023-12-03 11:43:39 32 4
gpt4 key购买 nike

我知道可能有一个主要的标准内置函数,但是我的意思是学习rust lang。

该函数的目的是在给定一定范围的数字的情况下获得素数的集合。

fn main() -> () {
let n = 1..20;
let primes: Vec<u32> = Vec::new();
for val in n {
primes.push( (1..20).filter(|x| x / val == 1 && x % val == 0).collect() );
println!("we got: {}", primes[val-1]);
}
// expecting primes to be [2, 3, 5, 7, 11, 13, 17]
}

编译器提示
error[E0308]: mismatched types
--> src/main.rs:5:22
|
5 | primes.push( (1..20).filter(|x| x / val == 1 && x % val == 0) );
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected u32, found struct `std::iter::Filter`
|
= note: expected type `u32`
found type `std::iter::Filter<std::ops::Range<{integer}>, [closure@src/main.rs:5:37: 5:69 val:_]>`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0308`.

我在这里做错了什么?我很难拥有所有这些所有权,引用资料和一生的东西

最佳答案

push只能将单个元素推送到向量上,例如

primes.push(2);

但是, collect()在这里不产生单个元素。而是 yields a collection that implements FromIterator

要通过迭代器的内容对 extend进行 Vec编码,我们改用它的 Extend implementation:
primes.extend((1..20).filter(|x| x / val == 1 && x % val == 0));

请注意,现在缺少 collect

话虽如此, extendpush都需要一个 mut Vec,因此请确保使 primes可变。另外请记住,您当前的代码会产生错误的结果,因为它将所有数字相加;但是,这不是Rust问题,而是算法问题。

关于rust - Rust在给定一定范围的数字的情况下实现了一个简单的质数集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59693098/

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