【问题标题】:How can I iterate over a 2D vector in functional style?如何以功能样式迭代二维向量?
【发布时间】:2018-07-28 21:05:23
【问题描述】:

不幸的是,以下方法不起作用:

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】:

    使用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 将嵌套的迭代器转换为一个迭代器。

    【讨论】:

    • @Yee 不客气。不要犹豫,阅读迭代器(和切片)的整个文档,您会看到大量有用的方法;)
    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多