Module core::hash1.0.0[][src]

Expand description

通用哈希支持。

该模块提供了一种计算值的 hash 的通用方法。 哈希最常与 HashMapHashSet 一起使用。

使类型可哈希化的最简单方法是使用 #[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()
}
Run

Macros

Hash

派生宏,生成 Hash trait 的实现。

Structs

BuildHasherDefault

用于为实现 HasherDefault 的类型创建默认的 BuildHasher 实例。

SipHasherDeprecated

SipHash 2-4 的实现。

Traits

BuildHasher

用于创建 Hasher 实例的 trait。

Hash

可散列的类型。

Hasher

trait,用于散列任意字节流。