Итерация нескольких векторов по очереди (Rust)

let fruits = vec!["apple", "banana", "orange"];
let cities = vec!["moscow", "berlin", "paris"];
let colors = vec!["red", "green", "blue"];

Как реализовать итерацию в таком порядке?

> apple
> moscow
> red
> banana
> berlin
> green

Как реализовать такую итерацию с произвольным количеством итерируемых объектов произвольной длины?


Ответы (1 шт):

Автор решения: NEStenerus nester

1. itertools::izip

cargo.toml
[dependencies]
itertools = "0.10"
main.rs
use itertools::izip;


fn main() {
    let fruits = vec!["apple", "banana", "orange"];
    let cities = vec!["moscow", "berlin", "paris"];
    let colors = vec!["red", "green", "blue"];

    for (fruit, city, color) in izip!(fruits, cities, colors) {
        println!("{fruit}\n{city}\n{color}");
    }
}

2. итерирование через индекс:

let fruits = vec!["apple", "banana", "orange"];
let cities = vec!["moscow", "berlin", "paris"];
let colors = vec!["red", "green", "blue"];

for i in 0..colors.len() {
    println!(
        "{}\n{}\n{}\n",
        fruits.get(i).unwrap_or(&""),  //  На случай, если длины 
        cities.get(i).unwrap_or(&""),  //  итерируемых объектов
        colors.get(i).unwrap_or(&"")   //  не совпадают.
    );
}
→ Ссылка