Expand description
通用哈希支持。
该模块提供了一种计算值的 哈希 的通用方法。
哈希最常与 HashMap
和 HashSet
一起使用。
使类型可哈希化的最简单方法是使用 #[derive(Hash)]
:
Examples
use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher};
#[derive(Hash)]
struct Person {
id: u32,
name: String,
phone: u64,
}
let person1 = Person {
id: 5,
name: "Janet".to_string(),
phone: 555_666_7777,
};
let person2 = Person {
id: 5,
name: "Bob".to_string(),
phone: 555_666_7777,
};
assert!(calculate_hash(&person1) != calculate_hash(&person2));
fn calculate_hash<T: Hash>(t: &T) -> u64 {
let mut s = DefaultHasher::new();
t.hash(&mut s);
s.finish()
}
Run如果您需要更多地控制值的散列方式,则需要实现 Hash
trait:
use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher};
struct Person {
id: u32,
name: String,
phone: u64,
}
impl Hash for Person {
fn hash<H: Hasher>(&self, state: &mut H) {
self.id.hash(state);
self.phone.hash(state);
}
}
let person1 = Person {
id: 5,
name: "Janet".to_string(),
phone: 555_666_7777,
};
let person2 = Person {
id: 5,
name: "Bob".to_string(),
phone: 555_666_7777,
};
assert_eq!(calculate_hash(&person1), calculate_hash(&person2));
fn calculate_hash<T: Hash>(t: &T) -> u64 {
let mut s = DefaultHasher::new();
t.hash(&mut s);
s.finish()
}
RunStructs
- SipHasherDeprecatedSipHash 2-4 的实现。
Traits
- 用于创建
Hasher
实例的 trait。 - 可散列的类型。
- 对任意字节流进行散列的 trait。
Derive Macros
- 派生宏,生成
Hash
trait 的实现。