You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:07:07