Rust:
שימוש במערכים אסוציאטיביים
איך עושים:
בראסט, הטיפוס HashMap
מהמודול std::collections
מספק את פונקציונליות המערכים האסוציאטיביים. הנה איך אפשר לעבוד איתם:
use std::collections::HashMap;
fn main() {
// יצירת HashMap חדש
let mut scores = HashMap::new();
// הוספת ערכים
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);
// גישה לערכים
let team_name = String::from("Blue");
if let Some(score) = scores.get(&team_name) {
println!("ניקוד לקבוצת בלו: {}", score); // פלט: ניקוד לקבוצת בלו: 10
}
// עדכון ערך
scores.entry(String::from("Blue")).and_modify(|e| *e += 5);
// חיפוש מעבר על זוגות מפתח-ערך
for (key, value) in &scores {
println!("{}: {}", key, value); // פלט: Blue: 15, Yellow: 50
}
}
ניתוח עמוק
הHashMap
בראסט משתמש בפונקציה של גיבוב למיפוי מפתחות לערכים, מה שמאפשר חיפוש נתונים מהיר. עם זאת, יעילות זו באה עם מחיר: מפות גיבוב אינן שומרות על סדר האלמנטים שלהן. זה בניגוד ליישומי מערכים אסוציאטיביים אחרים, כמו אלה בפייתון (dict
) או ברובי, שבגרסאות האחרונות מתחזקים את סדר ההכנסה כתכונה. למקרים שבהם סדר זוגות המפתח-ערך חשוב, מפתחי ראסט יכולים לשקול להשתמש בBTreeMap
מהמודול std::collections
, ששומר על סדר אך עשוי להציע הכנסה וחיפוש איטיים יותר לעומת HashMap
. בסופו של דבר, הבחירה בין HashMap
לBTreeMap
תלויה בדרישות הספציפיות בנוגע לסדר וביצועים.