不能从`Iterator <Item =&String>`生成值类型为`Vec <String>`的迭代器收集问题

时间:2020-01-15 06:03:48

标签: rust iterator

我在使用Iterator的{​​{1}}函数时遇到困难,并且不确定如何理解和解决此编译器错误。

我通过序列化两个结构来将文件路径列表映射成两个字符串:

flat_map
let body: Vec<String> = read_dir(query.to_string())
    .iter()
    .enumerate()
    .flat_map(|(i, path)| {
        let mut body: Vec<String> = Vec::with_capacity(2);

        let entry = Entry { i };
        body.push(serde_json::to_string(&entry).unwrap());

        let record = parse_into_record(path.to_string()).unwrap();
        body.push(serde_json::to_string(&record).unwrap());

        body.iter()
    })
    .collect();

1 个答案:

答案 0 :(得分:4)

into_iter为您提供了一个遍历引用的迭代器。您需要一个拥有其值的消耗迭代器。为此,请改用fn main() { let result = (0..10).flat_map(|_| { let vec: Vec<String> = vec!["a".into(), "b".into(), "c".into()]; vec.into_iter() }).collect::<Vec<_>>(); } 。这是一个简单的示例:

iter

有关into_iterAllowedSkus之间差异的详细说明,请参见以下答案What is the difference between iter and into_iter?