Collections & Iterators
โมดูลนี้ครอบคลุมอะไรบ้าง
หัวข้อที่มีชื่อว่า “โมดูลนี้ครอบคลุมอะไรบ้าง”Rust มาพร้อมกับชุด Collections ในไลบรารีมาตรฐานที่ทรงพลัง และระบบ Iterator แบบ Lazy ที่มีต้นทุนเป็นศูนย์ ทั้งสองสิ่งนี้ช่วยให้คุณจัดเก็บ แปลง และประมวลผลข้อมูลได้โดยไม่ต้องเขียน Loop ด้วยตนเองหรือจัดสรรหน่วยความจำโดยไม่จำเป็น
โมดูลนี้แบ่งออกเป็นห้าบทเรียนที่มีโฟกัสชัดเจน:
| บทเรียน | หัวข้อ |
|---|---|
Vec<T> & String | Sequence ที่ขยายได้และข้อความที่เป็นเจ้าของ |
HashMap<K, V> | การค้นหาด้วย Key พร้อม Entry API |
| Iterators | Chain แบบ Lazy: map, filter, collect, fold |
| Closures | การจับ Environment; Fn / FnMut / FnOnce |
Collections หลักทั้งสี่
หัวข้อที่มีชื่อว่า “Collections หลักทั้งสี่”Collections ที่ใช้มากที่สุดใน Rust และเมื่อไหรควรเลือกใช้แต่ละอัน:
Vec<T>— Array บน Heap แบบ Contiguous ที่เรียงลำดับได้ ใช้เมื่อต้องการเข้าถึงด้วย Index หรือต้องการ List ที่ขยายได้String— ข้อความ UTF-8 ที่เป็นเจ้าของ ใช้เมื่อต้องสร้างหรือแก้ไขข้อความ ณ RuntimeHashMap<K, V>— Hash Table ที่ Map Key ไปยัง Value ใช้เมื่อต้องการค้นหาอย่างรวดเร็วด้วย KeyHashSet<T>— ชุดของค่าที่ไม่ซ้ำกัน ใช้เมื่อต้องการตรวจสอบ Membership เพียงอย่างเดียว
ระบบ Iterator
หัวข้อที่มีชื่อว่า “ระบบ Iterator”ทุก Collection ใน Rust เปิดเผย Iterator การทำงานของ Iterator นั้นเป็นแบบ Lazy — ไม่มีงานใดเกิดขึ้นจนกว่า Consumer (เช่น collect, sum, หรือ for) จะดึงค่าผ่าน Chain
let v = vec![1, 2, 3, 4, 5];
// ยังไม่มีการประมวลผล — Chain เป็นแค่คำอธิบายการแปลงlet chain = v.iter().filter(|&&x| x % 2 == 0).map(|&x| x * 10);
// Consumer เป็นตัวขับเคลื่อน Chainlet result: Vec<i32> = chain.collect();use std::collections::HashMap;use std::collections::HashSet;
fn main() { // Vec<i32> let mut v: Vec<i32> = vec![1, 2, 3]; v.push(4); println!("Vec: {:?}", v);
// String let mut s = String::from("Hello"); s.push_str(", Rust!"); println!("String: {}", s);
// HashMap<&str, i32> — sort keys for deterministic output let mut map = HashMap::new(); map.insert("one", 1); map.insert("two", 2); map.insert("three", 3); let mut keys: Vec<&str> = map.keys().cloned().collect(); keys.sort(); for k in &keys { println!("{}: {}", k, map[k]); }
// HashSet<i32> let set: HashSet<i32> = vec![1, 2, 3, 2, 1].into_iter().collect(); let mut items: Vec<i32> = set.into_iter().collect(); items.sort(); println!("Set: {:?}", items);}Compiling…