0Pricing
Zig Academy · บทเรียน

การใช้ HashMap และ AutoHashMap

จัดเก็บคู่คีย์-ค่าจาก std

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

เหตุใดจึงใช้แฮชแมป

แฮชแมปเก็บคู่ คีย์-ค่า และค้นหาได้ในเวลาเกือบคงที่ Zig มีแฮชแมปให้ในไลบรารีมาตรฐาน คุณจึงแทบไม่ต้องเขียนเอง 🗺️

เริ่มด้วย AutoHashMap

std.AutoHashMap จะเลือกการแฮชและการตรวจสอบความเท่ากันให้โดยอัตโนมัติสำหรับชนิดคีย์ทั่วไป เช่น จำนวนเต็มและอีนัม เพียงระบุชนิดคีย์และชนิดค่า

const Map = std.AutoHashMap(u32, []const u8);

ต้องใช้ตัวจัดสรร

เช่นเดียวกับโครงสร้างเก็บข้อมูลที่ขยายได้อื่น ๆ แมปจะยืมหน่วยความจำมา ส่ง ตัวจัดสรรให้ init แล้วแมปจะขยายเมื่อคุณเพิ่มรายการ

var map = std.AutoHashMap(u32, u32).init(allocator);
defer map.deinit();

แทรกด้วย put

put จะเพิ่มหรือเขียนทับคีย์ การดำเนินการนี้อาจจัดสรรหน่วยความจำระหว่างการขยาย จึงส่งคืนยูเนียนข้อผิดพลาด และคุณต้องใช้ try

try map.put(1, 100);

ค้นหาด้วย get

get จะส่งคืนค่าแบบออปชันนัล: ค่าที่เก็บไว้หากมีคีย์อยู่ หรือ null หากไม่มีคีย์นั้น จึงไม่ทำให้โปรแกรมล่มเมื่อไม่พบคีย์

const v = map.get(1); // ?u32

คลายค่าผลลัพธ์

เนื่องจาก get เป็นออปชันนัล ให้จัดการกรณีที่ไม่มีค่าด้วย orelse หรือใช้การจับค่าใน if ก่อนนำค่าไปใช้

const v = map.get(1) orelse 0;

ตรวจสอบและนำออก

ใช้ contains เพื่อถามว่ามีคีย์หรือไม่ และเรียกใช้ remove เพื่อลบคีย์ remove จะส่งคืน true หากมีคีย์นั้นอยู่

if (map.contains(1)) _ = map.remove(1);

เมื่อ Auto ตัดสินใจไม่ได้

สำหรับคีย์อย่างสไลซ์ การแฮชอัตโนมัติจะคอมไพล์ไม่ผ่าน ในกรณีนี้ให้ใช้ std.HashMap ระดับล่างกว่าและจัดเตรียมบริบท

StringHashMap สำหรับคีย์ข้อความ

คีย์สตริงเป็นสิ่งที่ใช้กันทั่วไป ดังนั้น std จึงมีตัวช่วยพร้อมใช้: std.StringHashMap รู้วิธีแฮช []const u8 อยู่แล้ว

var m = std.StringHashMap(i32).init(allocator);
try m.put("score", 42);

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

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

var it = map.iterator();
while (it.next()) |e| {
    std.debug.print("{d}={d}\n", .{ e.key_ptr.*, e.value_ptr.* });
}

เรียก deinit ให้ Map เสมอ

แมปเป็นเจ้าของบัฟเฟอร์ภายใน ดังนั้นให้เรียก deinit เมื่อใช้งานเสร็จ ตัวจัดสรรสำหรับการทดสอบจะแจ้งเตือนหากคุณลืม

defer map.deinit();

ตรวจสอบอย่างรวดเร็ว

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

สรุป

ใช้ AutoHashMap สำหรับคีย์ทั่วไป และใช้ StringHashMap สำหรับข้อความ เริ่มต้นด้วยตัวจัดสรร ใช้ put และ get กับคู่คีย์-ค่า วนซ้ำ แล้วเรียก deinit 🎯

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

บทเรียน “การใช้ HashMap และ AutoHashMap” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การใช้ HashMap และ AutoHashMap”

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

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

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

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

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

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

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

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

  1. สแตกแบบทั่วไปตั้งแต่เริ่มต้น
  2. รายการเชื่อมโยงทางเดียว
  3. การใช้ HashMap และ AutoHashMap
  4. การวิเคราะห์ประสิทธิภาพและข้อแลกเปลี่ยนด้านความปลอดภัย
← กลับไปที่ Zig Academy