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

HashMaps

การจัดเก็บแบบคีย์-ค่า

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

HashMap คืออะไร

HashMap<K, V> จัดเก็บคู่ คีย์และค่า คุณค้นหาค่าด้วยคีย์แทนการค้นหาด้วยตำแหน่ง

คุณต้องนำเข้า HashMap จากไลบรารีมาตรฐาน

use std::collections::HashMap;

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

การนำเข้า HashMap

HashMap ไม่ได้อยู่ในชุดที่นำเข้าโดยปริยาย ดังนั้นให้เพิ่มบรรทัดนี้ไว้ด้านบนของไฟล์:

  • use std::collections::HashMap;
use std::collections::HashMap;

fn main() {
    let scores: HashMap<&str, i32> = HashMap::new();
    println!("empty: {}", scores.is_empty());
}

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

เพิ่มรายการด้วย insert โดยระบุคีย์และค่า แผนผังต้องเป็น mut

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();
    scores.insert("Alice", 90);
    scores.insert("Bob", 85);
    println!("{:?}", scores);
}

การค้นหาค่า

ใช้ get เพื่ออ่านค่าด้วยคีย์ เมธอดนี้ส่งค่า Option กลับมาเป็น Some(value) เมื่อพบค่า และเป็น None เมื่อไม่พบ

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();
    scores.insert("Alice", 90);
    match scores.get("Alice") {
        Some(s) => println!("score {}", s),
        None => println!("not found"),
    }
}

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

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

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.insert("count", 1);
    map.insert("count", 5); // overwrites
    println!("{:?}", map.get("count"));
}

แทรกเฉพาะเมื่อยังไม่มี

API entry ร่วมกับ or_insert จะแทรกค่าเริ่มต้นเฉพาะเมื่อไม่พบคีย์

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.entry("x").or_insert(10);
    map.entry("x").or_insert(99); // ignored, key exists
    println!("{:?}", map.get("x"));
}

การนับด้วย entry

รูปแบบที่ใช้บ่อยคือ ขอข้อมูลอ้างอิงแบบเปลี่ยนแปลงได้ด้วย or_insert แล้วเพิ่มค่าเพื่อใช้นับจำนวนครั้งที่ปรากฏ

use std::collections::HashMap;

fn main() {
    let text = "a b a c b a";
    let mut counts = HashMap::new();
    for word in text.split_whitespace() {
        let c = counts.entry(word).or_insert(0);
        *c += 1;
    }
    println!("{:?}", counts);
}

การวนซ้ำผ่านรายการ

วนซ้ำผ่าน HashMap เพื่อเยี่ยมชมคู่คีย์และค่าทุกคู่ ลำดับของรายการไม่รับประกัน

use std::collections::HashMap;

fn main() {
    let mut ages = HashMap::new();
    ages.insert("Tom", 30);
    ages.insert("Sue", 25);
    for (name, age) in &ages {
        println!("{} is {}", name, age);
    }
}

การนำรายการออก

ลบคู่ข้อมูลด้วย remove เมธอดนี้ส่งค่าที่นำออกกลับมาในรูปแบบ Option

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.insert("key", 42);
    let removed = map.remove("key");
    println!("removed {:?}, len {}", removed, map.len());
}

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

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

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.insert("on", true);
    println!("{}", map.contains_key("on"));
    println!("{}", map.contains_key("off"));
}

ค่าเริ่มต้นด้วย unwrap_or

ขณะอ่านค่า คุณสามารถระบุค่าทดแทนด้วย unwrap_or แทนการตรวจสอบ Option ด้วยรูปแบบการจับคู่

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.insert("a", 1);
    let value = map.get("missing").unwrap_or(&0);
    println!("{}", value);
}

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

ทบทวนพฤติกรรมของการค้นหาใน HashMap

สรุปทบทวน

HashMaps ใน Rust:

  • HashMap<K, V> จัดเก็บคู่คีย์และค่า และต้องนำเข้าจาก std::collections
  • insert เพิ่มหรือเขียนทับค่า ส่วน get ส่งค่า Option กลับมา
  • entry().or_insert() จะแทรกค่าเฉพาะเมื่อยังไม่มีคีย์
  • วนซ้ำด้วย for (k, v) in &map
use std::collections::HashMap;

fn main() {
    let mut inventory = HashMap::new();
    inventory.insert("apples", 3);
    *inventory.entry("apples").or_insert(0) += 2;
    println!("{:?}", inventory.get("apples"));
}

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

บทเรียน “HashMaps” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “HashMaps”

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

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

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

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

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

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

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

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

  1. เวกเตอร์
  2. สตริงและ &str
  3. HashMaps
  4. การวนซ้ำผ่านคอลเลกชัน
← กลับไปที่ Learn Rust Coding