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

问题描述 投票:1回答:1

不幸的是,以下内容不起作用:

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()方法。我怎么能实现这一目标?

loops vector functional-programming iterator rust
1个回答
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将嵌套迭代器转换为一个迭代器。

© www.soinside.com 2019 - 2024. All rights reserved.