如何在功能样式中迭代2D矢量?

时间:2018-02-18 13:56:10

标签: loops vector functional-programming iterator rust

不幸的是,以下情况不起作用:

let vecs: Vec<Vec<i32>> = get_vectors();

let result = vecs
    .iter()
    .iter()
    .do_something()
    .do_something_else() // etc

编译错误:

error[E0599]: no method named `iter` found for type`std::slice::Iter<'_, std::vec::Vec<i32>>` in the current scope
  --> src/main.rs:49:10
   |
49 |         .iter()
   | 

我可以用

来避免它
for row in vecs.iter() {
    for column in row.iter() {
        // do something
    }
}

我真的更喜欢.iter()方法。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:5)

使用flatten

fn main() {
    let v = vec![vec![1, 2], vec![3, 4], vec![5, 6]];

    for i in v.iter().flatten() {
        println!("{}", i); // 1 2 3 4 5 6
    }
}

flatten将嵌套迭代器转换为一个迭代器。