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
را نیز نمایش دهید.