Как я могу закрепить более двух итераторов?

Есть ли более прямой и читабельный способ сделать следующее:

fn main() {
    let a = [1, 2, 3];
    let b = [4, 5, 6];
    let c = [7, 8, 9];
    let iter = a.iter()
        .zip(b.iter())
        .zip(c.iter())
        .map(|((x, y), z)| (x, y, z));
}

То есть, как я могу построить итератор из n итераций, который дает n-кортежей?

Ответы

Ответ 1

Вы можете использовать макрос izip!() из ящика itertools, который реализует это для произвольного числа итераторов:

use itertools::izip;

fn main() {

    let a = [1, 2, 3];
    let b = [4, 5, 6];
    let c = [7, 8, 9];

    // izip!() accepts iterators and/or values with IntoIterator.
    for (x, y, z) in izip!(&a, &b, &c) {

    }
}

Вам необходимо добавить зависимость от itertools в Cargo.toml, использовать любую последнюю версию. Пример:

[dependencies]
itertools = "0.8"