根据重复序列构建向量

问题描述 投票:0回答:2

我正在写一个 Eratosthenes 筛子,为此你想开始一个布尔向量,其索引为奇数

true
和偶数索引
false
。目前我的代码是:

let mut is_prime: Vec<bool> = vec![true; capacity];
is_prime.iter_mut().step_by(2).for_each(|m| *m = false);

但是,我正在尝试找到一种使用这种交替的

true
false
序列构建向量的方法。感谢任何帮助,谢谢。

注意

我知道在这种情况下这不会对性能产生巨大影响,但我认为这是一个有趣的问题,并且怀疑在某些情况下它可能会产生影响。

rust initialization vec
2个回答
0
投票

您可以组合一些迭代器实用程序以高效且符合人体工程学地执行此操作:

let mut is_prime: Vec<_> = std::iter::repeat([true, false])
    .flatten()
    .take(capacity)
    .collect();

注意迭代器确切地知道它的长度,这允许

collect
构建一个预先分配足够容量的向量。


0
投票

您可以使用

cycle
take
collect

let mut sieve: Vec<_> = [ false, true ].iter().cycle().take (capacity).collect();

游乐场

© www.soinside.com 2019 - 2024. All rights reserved.