Hash - สร้างค่าแฮช
std::hash module มี traits สำหรับคำนวณค่า hash ของข้อมูล ใช้ใน HashMap, HashSet และการเปรียบเทียบแบบเร็ว
hash คืออะไร?
Section titled “hash คืออะไร?”Hash คือการแปลงข้อมูลใดๆ เป็นตัวเลขขนาดคงที่ (เช่น u64) มีประโยชน์สำหรับ:
- HashMap และ HashSet - ค้นหา O(1) average
- เปรียบเทียบข้อมูลเร็ว - compare hashes แทนทั้ง object
- ตรวจสอบความซ้ำ - deduplicate data
- Checksums และ integrity - ตรวจสอบว่าข้อมูลไม่เปลี่ยน
Hash Consistency Rule
Section titled “Hash Consistency Rule”use std::hash::{Hash, Hasher};use std::collections::hash_map::DefaultHasher;
fn main() { // ============================================ // กฎเหล็ก: ถ้า a == b แล้ว hash(a) == hash(b) // ============================================
// ถ้า a == b (PartialEq returns true) // แล้ว hash(a) MUST equal hash(b)
// แต่! hash(a) == hash(b) ไม่ได้หมายความว่า a == b // (hash collision เกิดได้)
fn hash_value<T: Hash>(t: &T) -> u64 { let mut hasher = DefaultHasher::new(); t.hash(&mut hasher); hasher.finish() }
// ตัวอย่าง: strings ที่เท่ากัน let s1 = String::from("hello"); let s2 = String::from("hello");
println!("s1 == s2: {}", s1 == s2); println!("hash(s1) == hash(s2): {}", hash_value(&s1) == hash_value(&s2));
// ตัวอย่าง: strings ต่างกัน let s3 = String::from("world");
println!("\ns1 == s3: {}", s1 == s3); println!("hash(s1) == hash(s3): {}", hash_value(&s1) == hash_value(&s3));}เข้าสู่ระบบเพื่อดูเนื้อหาเต็ม
ยืนยันตัวตนด้วยบัญชี Google เพื่อปลดล็อกบทความทั้งหมด
Login with Google