Rust 如何在没有for循环的元组向量中转换两个嵌套哈希映射?

Rust 如何在没有for循环的元组向量中转换两个嵌套哈希映射?,rust,hashmap,tuples,vec,Rust,Hashmap,Tuples,Vec,采用以下数据类型: let mut items=HashMap:::new(); 我成功地将其转化为元组向量,如下所示: 让mut vector\u/u元组:Vec=Vec![]; for items.iter()中的(外部\u id,内部\u散列\u映射){ for(inner_hash_map.iter()中的(inner_id,state){ push((*外部id,*内部id,*状态)); } } 但是我想缩小这个代码逻辑,可能是借助Rust标准库中的和函数 如何在不使用for循环的

采用以下数据类型:

let mut items=HashMap:::new();
我成功地将其转化为元组向量,如下所示:

让mut vector\u/u元组:Vec=Vec![];
for items.iter()中的(外部\u id,内部\u散列\u映射){
for(inner_hash_map.iter()中的(inner_id,state){
push((*外部id,*内部id,*状态));
}
}
但是我想缩小这个代码逻辑,可能是借助Rust标准库中的和函数

如何在不使用for循环的情况下获得相同的结果

如何在不使用for循环的情况下获得相同的结果

您可以使用
collect()
从迭代器构建向量,而无需显式循环:

let vector_of_tuples: Vec<(u64, u64, bool)> = items
    .iter()
    // ...
    .collect();
在许多情况下,链接迭代器适配器将产生比等价的
for
循环更容易理解的代码,因为迭代器是以声明式风格编写的,并且往往不需要副作用。然而,在这种特殊情况下,原始的
for
循环实际上可能是更可读的选项。YMMV,最佳选择有时取决于您和其他项目贡献者的编程背景

let vector_of_tuples: Vec<_> = items
    .iter()
    .flat_map(|(&outer_id, inner_hash_map)| {
        inner_hash_map
            .iter()
            .map(move |(&inner_id, &state)| (outer_id, inner_id, state))
    })
    .collect();