Я хочу перебрать каждый элемент Vec
и BTreeMap
. В настоящее время я делаю это:
fn main() {
let mut a = std::collections::BTreeMap::new();
a.insert("a", "b");
a.insert("b", "c");
let b = vec!["hi", "Hello"];
for (k, v) in a {
for c in b.iter() {
println!("{}, {}, {}", k, v, c);
}
}
}
но выходные данные показывают значения, распечатанные дважды:
a, b, hi
a, b, Hello
b, c, hi
b, c, Hello
Я хочу, чтобы это выглядело так:
a, b, hi
b, c, Hello
Я знаю, что вышеизложенное неверно (поскольку внутренний .iter()
вызывается дважды), но другого подхода я не знаю.
Ключевое слово — «zip-итераторы», оно доступно как Iterator::zip() и std::iter::zip():
for ((k, v), c) in std::iter::zip(a, b) {
println!("{}, {}, {}", k, v, c);
}
На этом мы остановимся на более коротком списке. itertools
также имеет zip_longest().
Хороший! Это работает! Извините за задержку. Вот такой простой подход к простому вопросу! Спасибо!
Черт, я забыл, я хочу, чтобы BTreeMap и Vector были с одинаковым номером элемента (обновлю вопрос). Я хочу, чтобы результат был таким:
a,b,hi b,c,hello, c,d,sup