HashMap
نقشه hash استاندارد با حفاظت در برابر حملات HashDoS:
use std::collections::HashMap;
fn main() {
let mut page_counts = HashMap::new();
page_counts.insert("ماجراهای هاکلبری فین", 207);
page_counts.insert("قصههای گریمز", 751);
page_counts.insert("غرور و تعصب", 303);
if !page_counts.contains_key("Les Misérables") {
println!(
"ما درباره {} کتاب می دانیم، اما Les Misérables نه.",
page_counts.len()
);
}
for book in ["غرور و تعصب", "ماجراجویی آلیس در سرزمین عجایب"] {
match page_counts.get(book) {
Some(count) => println!("{book}: {count} صفحهها"),
None => println!("{book} ناشناخته است."),
}
}
// Use the .entry() method to insert a value if nothing is found.
for book in ["غرور و تعصب", "ماجراجویی آلیس در سرزمین عجایب"] {
let page_count: &mut i32 = page_counts.entry(book).or_insert(0);
*page_count += 1;
}
println!("{page_counts:#?}");
}
-
HashMapدر prelude تعریف نشده و باید به scope وارد شود. -
سطرهای کد زیر را امتحان کنید. سطر اول بررسی میکند که آیا یک کتاب در
HashMapوجود دارد یا خیر و اگر وجود نداشت، یک مقدار جایگزین برمیگرداند. سطر دوم مقدار جایگزین را درHashMapوارد میکند اگر کتاب پیدا نشد.let pc1 = page_counts .get("هری پاتر و سنگ جادو") .unwrap_or(&336); let pc2 = page_counts .entry("The Hunger Games") .or_insert(374); -
برخلاف
!vec، متأسفانه ماکروی استاندارد!hashmapوجود ندارد.-
از نسخه 1.56 Rust به بعد،
HashMapپیادهسازیکنندهFrom<[(K, V); N]>است که به ما اجازه میدهد بهراحتی یکHashMapرا از یک آرایه مقداردهی اولیه کنیم:let page_counts = HashMap::from([ ("هری پاتر و سنگ جادو".to_string(), 336), ("The Hunger Games".to_string(), 374), ]);
-
-
بهطور جایگزین،
HashMapمیتواند از هرIteratorکه جفتهای key-value را تولید میکند، ساخته شود. -
ما
<HashMap<String, i32را نمایش میدهیم و از استفاده ازstr&بهعنوان کلید اجتناب میکنیم تا مثالها سادهتر شوند. استفاده از ارجاعات در مجموعهها البته ممکن است، اما میتواند به مشکلاتی با borrow checker منجر شود.- حذف
()to_stringاز مثال بالا را امتحان کنید و ببینید آیا هنوز کامپایل میشود یا خیر. فکر میکنید ممکن است با چه مشکلاتی مواجه شویم؟
- حذف
-
این چندین تایپ “تایپ بازگشتی خاص متد” دارد، مانند
std::collections::hash_map::Keys. این تایپها معمولاً در جستجوهای مستندات Rust ظاهر میشوند. مستندات این تایپ را به دانشآموزان نشان دهید و پیوند مفید بازگشتی به متدkeysرا نیز نمایش دهید.