0Pricing
Learn Rust Coding · บทเรียน

สร้าง HashMap

แทรกและค้นหาด้วยคีย์

สร้าง HashMap เป็นบทเรียน Learn Rust Coding ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn Rust Coding และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน

HashMap คืออะไร

HashMap จัดเก็บข้อมูลเป็นคู่คีย์กับค่า คุณค้นหาข้อมูลด้วยคีย์แทนการใช้ดัชนี

ลองนึกถึงสมุดโทรศัพท์: ชื่อหนึ่งชื่อ (คีย์) จับคู่กับหมายเลขหนึ่งหมายเลข (ค่า) HashMaps เหมาะอย่างยิ่งเมื่อต้องการค้นหาอย่างรวดเร็วด้วยคีย์ที่มีความหมาย

การนำเข้า HashMap

ต่างจาก Vec และ String ตรงที่ HashMap ไม่ได้อยู่ในส่วนเตรียมใช้งาน คุณต้องนำเข้ามาไว้ในขอบเขต

เพิ่มบรรทัด use ที่ด้านบนของไฟล์ เพื่อให้เรียกใช้ชื่อนี้ได้ทั่วทั้งมอดูล

use std::collections::HashMap;

fn main() {
    let scores: HashMap<String, i32> = HashMap::new();
    println!("empty map len: {}", scores.len());
}

การแทรกคู่ข้อมูล

ใช้ insert เพื่อเพิ่มคีย์และค่าของคีย์นั้น หากมีคีย์นี้อยู่แล้ว ค่าเดิมจะถูกแทนที่

ต้องประกาศแผนที่เป็น mut จึงจะแทรกข้อมูลได้

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();
    scores.insert("Alice", 50);
    scores.insert("Bob", 30);
    println!("{} players", scores.len());
}

การอนุมานชนิดข้อมูล

โดยปกติคุณแทบไม่ต้องเขียนชนิดข้อมูลเอง รัสต์อนุมาน HashMap<&str, i32> จากการเรียก insert ครั้งแรก ๆ

ในที่นี้คีย์เป็นส่วนตัดของสตริง และค่าเป็นจำนวนเต็ม ทั้งหมดถูกกำหนดจากการใช้งาน

use std::collections::HashMap;

fn main() {
    let mut ages = HashMap::new();
    ages.insert("Sam", 28);
    ages.insert("Mia", 34);
    println!("Sam is {}", ages["Sam"]);
}

การรับค่า

เมธอด get คืนค่าเป็น Option คุณจะได้ Some(&value) หากมีคีย์อยู่ หรือได้ None หากไม่มี

วิธีนี้บังคับให้คุณจัดการกรณีที่ไม่มีค่าอย่างปลอดภัย

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();
    scores.insert("Alice", 50);
    match scores.get("Alice") {
        Some(v) => println!("score: {}", v),
        None => println!("no score"),
    }
}

การใช้ดัชนีเทียบกับ get

คุณสามารถใช้ดัชนีด้วย map[key] ได้ แต่จะทำให้โปรแกรม ตื่นตระหนก หากไม่มีคีย์นั้น

ควรใช้ get เมื่อคีย์อาจไม่มีอยู่ ใช้ดัชนีเฉพาะเมื่อแน่ใจว่ามีคีย์อยู่

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    m.insert("x", 1);
    // m["y"] would panic!
    let v = m.get("y").copied().unwrap_or(0);
    println!("y = {}", v);
}

การอัปเดตค่า

การเรียก insert ด้วยคีย์ที่มีอยู่แล้วจะเขียนทับค่าเดิม

ค่าก่อนหน้าจะถูกคืนกลับมา โดยห่ออยู่ใน Option เพื่อให้คุณตรวจสอบได้หากต้องการ

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    m.insert("k", 1);
    let old = m.insert("k", 9);
    println!("old = {:?}, now = {}", old, m["k"]);
}

การตรวจสอบคีย์

ใช้ contains_key เพื่อตรวจสอบว่ามีคีย์อยู่หรือไม่โดยไม่ต้องดึงค่าของคีย์นั้น

เมธอดนี้คืนค่าเป็น bool ธรรมดา จึงสะดวกสำหรับใช้ในเงื่อนไข if

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    m.insert("on", true);
    if m.contains_key("on") {
        println!("key exists");
    }
}

การลบรายการ

เมธอด remove ลบคีย์และคืนค่าของคีย์นั้นเป็น Option

หากไม่มีคีย์ดังกล่าว คุณจะได้ None ดังนั้นการลบจึงปลอดภัยเสมอ

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    m.insert("a", 1);
    let removed = m.remove("a");
    println!("removed {:?}, len {}", removed, m.len());
}

การวนซ้ำผ่านแผนที่

ลูป for ที่วนซ้ำผ่าน HashMap จะให้ทูเพิล (key, value) ที่อ้างอิงไปยังข้อมูล

โปรดทราบว่าลำดับไม่ได้กำหนดตายตัวและอาจเปลี่ยนระหว่างการทำงานแต่ละครั้ง เนื่องจากการแฮชทำให้ตำแหน่งต่าง ๆ กระจัดกระจาย

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    m.insert("a", 1);
    m.insert("b", 2);
    for (k, v) in &m {
        println!("{} -> {}", k, v);
    }
}

ความเป็นเจ้าของคีย์

เมื่อคุณแทรกค่าที่มีความเป็นเจ้าของ เช่น String แผนที่จะเข้าครอบครองความเป็นเจ้าของค่านั้น

หลังจากแทรกแล้ว คุณจะใช้ตัวแปรนั้นอีกไม่ได้ เว้นแต่จะโคลนไว้ก่อน

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    let name = String::from("Alice");
    m.insert(name, 50);
    // name is moved here; m owns it now
    println!("{}", m["Alice"]);
}

ตรวจสอบความเข้าใจ

คุณต้องการค่า แต่คีย์อาจไม่มีอยู่

สรุปทบทวน

คุณเรียนรู้การสร้าง HashMap การแทรกคู่ข้อมูล และการค้นหาค่าด้วย get หรือการใช้ดัชนี

คุณยังได้เรียนรู้ contains_key, remove, การวนซ้ำ และวิธีที่แผนที่เข้าครอบครองความเป็นเจ้าของคีย์ที่แทรกเข้าไป

คำถามที่พบบ่อย

บทเรียน “สร้าง HashMap” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “สร้าง HashMap” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn Rust Coding ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “สร้าง HashMap”

แทรกและค้นหาด้วยคีย์ คุณปฏิบัติ Learn Rust Coding ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn Rust Coding หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn Rust Coding บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “สร้าง HashMap” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Learn Rust Coding นี้ได้ไหม

ได้ บทเรียน Learn Rust Coding ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. สร้าง HashMap
  2. Entry API และค่าเริ่มต้น
  3. ทำงานกับ HashSet
  4. การนับและการจัดกลุ่ม
← กลับไปที่ Learn Rust Coding