繁体   English   中英

rust - 迭代具有限制的枚举变体

[英]rust - iterate over enum variants with limit

以下是我的代码的简化示例:

#[derive(Debug, EnumIter)]
enum Period {
    A,
    B,
    C,
    D,
    E,
    F,
    G,
}
...
#[test]
fn enum_loop_test() {
   for period in Period::iter() {
       println!("{:?}", period);
   }
}

通过以上,我将打印出整套Period 但是,如果我只想要其中的一部分怎么办?

我想让随机生成一个数字来随机获取集合的一部分,例如[ A, B, C][ A, B, C, D, E] 我怎样才能做到这一点?

您可以使用rand crate 来获取随机数,并从迭代器中take那么多元素:

use strum::IntoEnumIterator;
use strum_macros::EnumIter;
use rand::{self, Rng};

#[derive(Debug, EnumIter)]
enum Period {
    A,
    B,
    C,
    D,
    E,
    F,
    G,
}

fn main() {
    let max = Period::iter().count();
    let n = rand::thread_rng().gen::<usize>() % max;

    for period in Period::iter().take(n) {
        println!("{:?}", period);
    }
}

请注意,这可能会返回一个没有元素的迭代器,如果不需要,您可能需要调整n的计算方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM