Skip to content
เข้าสู่ระบบ

Hash - สร้างค่าแฮช

std::hash module มี traits สำหรับคำนวณค่า hash ของข้อมูล ใช้ใน HashMap, HashSet และการเปรียบเทียบแบบเร็ว

Hash คือการแปลงข้อมูลใดๆ เป็นตัวเลขขนาดคงที่ (เช่น u64) มีประโยชน์สำหรับ:

  • HashMap และ HashSet - ค้นหา O(1) average
  • เปรียบเทียบข้อมูลเร็ว - compare hashes แทนทั้ง object
  • ตรวจสอบความซ้ำ - deduplicate data
  • Checksums และ integrity - ตรวจสอบว่าข้อมูลไม่เปลี่ยน
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 เพื่อปลดล็อกบทความทั้งหมด