Есть ли способ построить условный из массива? - PullRequest
0 голосов
/ 21 мая 2018

Учитывая следующие два массива, есть ли способ построить условное выражение из b для использования в цикле значений в a, как в следующем коде?Я бы хотел, чтобы is_divisible выглядело как (i % 3 == 0) || (i % 5 == 0) || (i % 7 == 0)

fn main() {
    let a: Vec<u32> = vec![80, 90, 101, 254];
    let b: Vec<u32> = vec![3, 5, 7];

    let is_divisible = // ???

    for i in a {
        if is_divisible {
            println!("{} is true", i);
        }
    }
}

1 Ответ

0 голосов
/ 21 мая 2018

Вы можете создать замыкание, которое использует b и выполняет любую необходимую логику.В этом случае вы можете использовать Iterator::any и Iterator::all, чтобы проверить, соответствуют ли все значения некоторым критериям:

let is_divisible = |i| {
    b.iter().any(|b| i % b == 0)
};

Обычно я бы не сталзапишите его как отдельную переменную, и я бы использовал Iterator::filter вместо if:

for i in a.iter().filter(|&i| b.iter().any(|&b| i % b == 0)) {
    println!("{} is true", i);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...