Rust中如何比较两个HashMap的对象标识而非值标识?
判断两个HashMap是否为不同对象(比较底层标识)
在Rust中,HashMap的PartialEq trait实现是比较键值对内容是否完全一致,所以直接用!=比较的是内容,而非对象本身的标识。要判断两个HashMap是不是不同的对象,本质是比较它们的内存地址是否不同,这可以通过std::ptr::eq函数实现——该函数专门用于判断两个引用是否指向同一个内存位置。
修改后的代码示例
use std::collections::HashMap; use std::ptr; fn main() { let h1 = HashMap::<i64, i64>::new(); let h2 = HashMap::<i64, i64>::new(); // 断言两个HashMap是不同的对象(内存地址不同) assert!(!ptr::eq(&h1, &h2)); }
关键说明
ptr::eq(&a, &b)会返回true当且仅当a和b指向同一块内存(即同一个对象);反之则返回false。- 这里我们取反(
!),断言结果为true,以此验证h1和h2是不同的对象。 - 即使两个HashMap的键值对完全相同,只要它们是独立创建的对象,内存地址就会不同,这个断言就会通过。
内容的提问来源于stack exchange,提问作者Well3
相关产品推荐
相关产品推荐

