Rust

Rust — وکتورها (Vectors)

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

وکتورها (Vectors)

وکتور (Vector) یعنی آرایه قابل رشد. یعنی اندازه اش تغییر می کند. برخلاف آرایه ها، می تواند بزرگ و کوچک شود. این یعنی برای لیست های پویا عالی است.

ساخت وکتور

برای ساخت، از ماکرو vec! استفاده کن. ماکرو یعنی کدی که کد می سازد.

fn main() {
  let fruits = vec!["apple", "banana", "orange"];
}

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

دسترسی به عناصر

مثل آرایه ها با اندیس می خوانیم. اندیس از صفر شروع می شود.

fn main() {
  let fruits = vec!["apple", "banana", "orange"];
  println!("First fruit: {}", fruits[0]);
}

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

تغییر مقدار یک خانه

وکتور را mut کن. سپس با اندیس مقدار جدید بده.

fn main() {
  let mut fruits = vec!["apple", "banana", "orange"];
  fruits[0] = "grape";
  println!("New first fruit: {}", fruits[0]);
}

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

افزودن و حذف در انتها

با push() عنصر جدید به انتها اضافه کن. با pop() آخرین را حذف کن.

fn main() {
  let mut fruits = vec!["apple", "banana"];
  fruits.push("cherry");
  println!("{:?}", fruits);
}

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

fn main() {
  let mut fruits = vec!["apple", "banana", "cherry"];
  fruits.pop();
  println!("{:?}", fruits);
}

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

درج و حذف با اندیس مشخص

وکتورها برای انتها بهینه اند. اما با insert() و remove() می توانی وسط یا ابتدا کار کنی.

fn main() {
  let mut fruits = vec!["banana", "orange"];
  fruits.insert(0, "apple");
  println!("{:?}", fruits);
}

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

fn main() {
  let mut fruits = vec!["banana", "orange"];
  fruits.insert(1, "apple");
  println!("{:?}", fruits);
}

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

fn main() {
  let mut fruits = vec!["apple", "banana", "orange"];
  fruits.remove(0);
  println!("{:?}", fruits);
}

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

طول وکتور

با .len() تعداد عناصر را می گیریم. این ساده و کاربردی است.

fn main() {
  let fruits = vec!["apple", "banana", "cherry"];
  println!("There are {} fruits.", fruits.len());
}

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

حلقه روی وکتور و وام گیری

برای جلوگیری از جابه جایی داده، وکتور را وام بگیر. وام گیری (Borrowing) یعنی استفاده از ارجاع بدون مالکیت.

fn main() {
  let fruits = vec!["apple", "banana", "orange"];
  for fruit in &fruits {
    println!("I like {}.", fruit);
  }
  println!("{:?}", fruits);
}

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

نکته: کار روی ابتدا کندتر است؛ جابه جایی عناصر لازم می شود.

گام های تمرین

  1. یک وکتور بساز و اولین عضو را چاپ کن.
  2. با push() و pop() تغییرش بده.
  3. یک عضو در اندیس 1 درج کن.
  4. با حلقه، وکتور را با & پیمایش کن.

جمع بندی سریع

  • وکتورها پویا و قابل رشد هستند.
  • افزودن در انتها بهینه تر است.
  • insert و remove با اندیس هم ممکن است.
  • برای حلقه، از & استفاده کن.

برای مقایسه با آرایه ها، به آرایه ها سر بزن. برای ادامه ساختارها، صفحه تاپل ها را ببین. همچنین وکتورها در راست را نشانه گذاری کن.