如何在Rust中迭代FnvHashMap

如何在Rust中迭代FnvHashMap,rust,hashmap,fnv,Rust,Hashmap,Fnv,我有两个FnvHashMap,声明与第一个相同:FnvHashMap 第二:FnvHashMap 员工在哪里 pub struct Employee { pub emp_id: i32, pub lang_id: i32, pub dept_id: f64, pub description: String, } 我需要遍历“first”FnvHashMap,查看“second”FnvHashMap中是否有匹配的记录(emp_id和lang_id) 我可能不需要考

我有两个FnvHashMap,声明与第一个相同:FnvHashMap 第二:FnvHashMap 员工在哪里

pub struct Employee {
    pub emp_id: i32,
    pub lang_id: i32,
    pub dept_id: f64,
    pub description: String,
}
我需要遍历“first”FnvHashMap,查看“second”FnvHashMap中是否有匹配的记录(emp_id和lang_id)
我可能不需要考虑DePtTyID和描述

提前谢谢

实现嵌套循环后的新代码

for (_, employee1) in &first {
    for (_, employee2) in &second {
        if employee1.emp_id == employee2.emp_id && employee1.lang_id == employee2.lang_id {
            
                    values.push(OldNew {
                        old: employee2,
                        new: employee1,
                    });
        }
    }
}
     let new = first
            .into_iter()
            .filter(|(a, _)| !old.contains_key(a))
            .map(|(_, a)| a)
            .collect();

  let deleted = second
            .iter()
            .filter(|(a, _)| !new.contains_key(a))
            .map(|(&a, _)| a)
            .collect();
 
 Changes {
            deleted,
            new,
            values,
        }

pub struct Changes<T, I> {
    pub deleted: Vec<I>,
    pub new: Vec<T>,
    pub values: Vec<OldNew<T>>,
}

expected struct `organization::models::employee_stat::Employee`, found `&organization::models::employee_stat::Employee`
for(u,employee1)in&first{
对于(u2;,员工2)在和秒{
如果employee1.emp\u id==employee2.emp\u id&&employee1.lang\u id==employee2.lang\u id{
值。推送(旧的新的{
老:雇员2,
新:雇员1,
});
}
}
}
让新=第一
.into_iter()
.filter(|(a,|)|!old.contains|key(a))
.map(|(|,a)| a)
.收集();
让删除=秒
.国际热核实验堆(iter)
.filter(|(a,|)|!新建。包含|键(a))
.map(|(&a,|)a)
.收集();
变化{
删除,
新的,,
价值观
}
发布结构更改{
已删除发布:Vec,
新酒吧:Vec,
发布值:Vec,
}
预期结构为“组织::模型::雇员统计::雇员”,找到了“&组织::模型::雇员统计::雇员”`

只需创建两个嵌套for循环,在两个映射中迭代,然后比较两个循环迭代中需要的值,例如

for(u,employee1)in&first{
对于(u2;,员工2)在和秒{
如果employee1.emp\u id==employee2.emp\u id&&employee1.lang\u id==employee2.lang\u id{
/*如果找到匹配值,则在此运行代码*/
}
}
}

那么您想比较两个哈希映射的值并忽略所有键吗?是的,基本上我是在比较两个结构相似的表并查找更改,但为了匹配记录,我有两个键(复合主键)。谢谢您提供的代码。我是个新手。只是想知道有没有其他方法可以降低复杂性?我的hashMap有相当多的记录,嵌套循环可能会增加复杂性。@Ann据我所知,您必须遍历所有内容才能找到值,因为您不知道它们在哪里。您可以将地图中的所有值收集到向量中,然后按员工id对其进行排序,并执行某种搜索算法来查找值。如果您有非常大的数据集,这可能会更快,但会使实现更加复杂。谢谢Colby。我将对此进行研究。在实现循环
expected结构`organization::models::employee\u stat::employee`之后,您能帮我解决这个错误吗,找到`&organization::models::employee\u stat::employee`
我已在说明中添加了我的代码。@Ann我不知道此错误发生在何处,因为您没有在错误消息中显示,但错误只是您需要使用类似于
*EmployeeHere
*取消引用该员工。你也应该为此提出一个新问题,因为这是一个新问题。