Rust

Rust — هش مپ (HashMap)

آخرین بروزرسانی: 1404/08/14

هش مپ (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);
  }
}

مشاهده در ادیتور

نکته: کلیدها یکتا هستند. بنابراین درج دوباره همان کلید، مقدار قبلی را می پوشاند. برای ساختارهای دیگر به تاپل ها و ساختارها سر بزن.

گام های تمرین

  1. یک هش مپ بساز و سه شهر وارد کن.
  2. با .get() یک مقدار را چاپ کن.
  3. یکی را به روزرسانی کن و نتیجه را ببین.
  4. یک کلید را حذف کن و همه را چاپ کن.

جمع بندی سریع

  • کلید یکتا است؛ مقدار قابل تغییر است.
  • .get() شاید مقدار ندهد؛ بررسی کن.
  • .insert() مقدار قبلی را جایگزین می کند.
  • .remove() کلید را حذف می کند.
  • حلقه روی &map از جابجایی جلوگیری می کند.