Avatar ·

البحث والإدراج الفعالين في HashMap في Rust: كيف تتجنب التجزئة المزدوجة؟

مرحبًا أيها الزملاء! أنا بدأت في تعلم Rust وواجهت مهمة نموذجية: أحتاج إلى تحديث قيمة في HashMap إذا كان المفتاح موجودًا، أو إدراج زوج جديد إذا لم يكن المفتاح موجودًا. المشكلة هي أنني أفعل ذلك على مرحلتين: أولاً أتحقق من وجود المفتاح باستخدام contains_key()، ثم أقوم بالإدراج أو التعديل. لكن كما أفهم، هذا يؤدي إلى تجزئة مزدوجة — مرة عند التحقق ومرة عند الإدراج. يبدو هذا غير فعال، خاصةً للقواميس الكبيرة.

هذا هو الكود الحالي الخاص بي:

use std::collections::HashMap;

fn update_or_insert(map: &mut HashMap<String, i32>, key: &str, value: i32) {
    if map.contains_key(key) {
        // تحديث القيمة الموجودة
        if let Some(val) = map.get_mut(key) {
            *val = value;
        }
    } else {
        // إدراج جديدة
        map.insert(key.to_string(), value);
    }
}

هذا الكود يعمل، لكني قلق من أن contains_ke