我正在将一个Python程序重写成Rust,但是我无法翻译这一行:
itertools.product(range(0,8), repeat=n)
我的目标是实现类似于这样的东西:https://pastebin.com/ceEA5E3q(但是我可以更改数字的数量)。
产生的集合不必是元组(最好不要是元组)
我尝试编写一个宏来生成这些迭代器,因为它们有效:
2 => iproduct!(0..8, 0..8)
3 => iproduct!(0..8, 0..8, 0..8)
4 => iproduct!(0..8, 0..8, 0..8, 0..8)
等等。
然而,过了一会儿我没能创建这样的宏。
我想出了这个奇怪的hack:
steps = 3;
for idx in 0..8_u128.pow(steps as u32) {
let moves: Vec<u8> = format!("{:0fill$o}", idx, fill = steps)
.chars()
.map(|d| d.to_digit(10).unwrap() as u8)
.collect();
println!("{:?}", moves);
}
我正在创建一个包含零填充的八进制数的字符串,然后迭代数字并将它们转换为数字的Vec
。虽然它可以工作,但我觉得执行所有这些操作,特别是使用字符串,会对我的性能产生负面影响。