สร้าง 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ