[英]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.