HashMap
نقشه hash استاندارد با حفاظت در برابر حملات HashDoS:
Speaker Notes
This slide should take about 5 minutes.
-
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
را نیز نمایش دهید.