首页 > 解决方案 > 迭代 [false, true] 的最有效方法是什么?

问题描述

我有一个foo需要 3 个布尔值的函数,我想用每个布尔值组合得到这个函数的结果。

这是我的做法:

fn foo(b1: bool, b2: bool, b3: bool) -> bool {
    b1 && b2 || !b3
}

fn main() {
    for b1 in vec![false, true] {
        for b2 in vec![false, true] {
            for b3 in vec![false, true] {
                println!("{} {} {} -> {}", b1, b2, b3, foo(b1, b2, b3));
            }
        }
    }
}

有没有比创建一个向量然后迭代它更直接/更短的方法?

有没有办法使用宏或可变函数来做到这一点,以便编译器只需遍历每个案例而不进行迭代?

标签: rustbooleaniterationcombinations

解决方案


您可以使用itertools板条箱,然后使用iproduct!()宏。

use itertools::iproduct;

fn main() {
    const FT: &[bool; 2] = &[false, true];

    for (&b1, &b2, &b3) in iproduct!(FT, FT, FT) {
        println!("{} {} {} -> {}", b1, b2, b3, foo(b1, b2, b3));
    }
}

不是说它“更高效”,而是写起来更短。


推荐阅读