البحث والإدراج الفعالين في 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