هش مپ (HashMap)
هش مپ (HashMap) یعنی جفت های کلید/مقدار. مثل دفتر حضور که نام را کلید می گیری و وضعیت را مقدار. بنابراین جستجو سریع می شود و کد مرتب می ماند.
اضافه کردن کتابخانه
برای استفاده باید HashMap را از کتابخانه استاندارد وارد کنیم.
use std::collections::HashMap;
fn main() {
let _map: HashMap<&str, &str> = HashMap::new();
}
ساخت یک HashMap
ابتدا یک نقشه خالی بساز. سپس کلید و مقدار را وارد کن.
use std::collections::HashMap;
fn main() {
let mut capital_cities = HashMap::new();
capital_cities.insert("England", "London");
capital_cities.insert("Germany", "Berlin");
capital_cities.insert("Norway", "Oslo");
println!("{:?}", capital_cities);
}
دسترسی به مقدار با کلید
با .get() مقدار را می گیریم. نتیجه شاید پیدا نشود.
use std::collections::HashMap;
fn main() {
let mut capital_cities = HashMap::new();
capital_cities.insert("England", "London");
capital_cities.insert("Germany", "Berlin");
capital_cities.insert("Norway", "Oslo");
if let Some(city) = capital_cities.get("England") {
println!("The capital of England is {}.", city);
} else {
println!("England is not in the map.");
}
}
به روزرسانی مقدار
اگر همان کلید را دوباره درج کنی، مقدار قبلی جایگزین می شود.
use std::collections::HashMap;
fn main() {
let mut capital_cities = HashMap::new();
capital_cities.insert("England", "London");
capital_cities.insert("England", "Berlin");
println!("{:?}", capital_cities);
}
حذف کلید
برای حذف یک کلید از .remove() استفاده کن.
use std::collections::HashMap;
fn main() {
let mut capital_cities = HashMap::new();
capital_cities.insert("England", "London");
capital_cities.insert("Germany", "Berlin");
capital_cities.insert("Norway", "Oslo");
capital_cities.remove("England");
println!("{:?}", capital_cities);
}
حلقه روی همه جفت ها
می توانی با for روی کلید و مقدار بگردی.
use std::collections::HashMap;
fn main() {
let mut capital_cities = HashMap::new();
capital_cities.insert("England", "London");
capital_cities.insert("Germany", "Berlin");
capital_cities.insert("Norway", "Oslo");
for (country, city) in &capital_cities {
println!("The capital of {} is {}.", country, city);
}
}
نکته: کلیدها یکتا هستند. بنابراین درج دوباره همان کلید، مقدار قبلی را می پوشاند. برای ساختارهای دیگر به تاپل ها و ساختارها سر بزن.
گام های تمرین
- یک هش مپ بساز و سه شهر وارد کن.
- با
.get()یک مقدار را چاپ کن. - یکی را به روزرسانی کن و نتیجه را ببین.
- یک کلید را حذف کن و همه را چاپ کن.
جمع بندی سریع
- کلید یکتا است؛ مقدار قابل تغییر است.
.get()شاید مقدار ندهد؛ بررسی کن..insert()مقدار قبلی را جایگزین می کند..remove()کلید را حذف می کند.- حلقه روی &map از جابجایی جلوگیری می کند.