0Pricing
Learn Rust Coding · درس

التوسيع والتقليص

أدرج العناصر وأزلها وغيّر الحجم

التوسيع والتقليص درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

Vectors Can Change Size

إحدى الميزات الرئيسية للمتجهات (vectors) هي أنها تغير حجمها وقت التشغيل. يمكنك إضافة عناصر عندما يكون لديك المزيد من البيانات وإزالتها عندما لم تعد بحاجة إليها.

كل تغيير في الحجم يتطلب التصريح عن المتجه كـ mut.

التكبير باستخدام push

تضيف الطريقة push عنصرًا واحدًا إلى النهاية، فتزيد طول المتجه بمقدار واحد. وهذه أكثر طرق التكبير شيوعًا.

يزداد طول المتجه أدناه من 0 إلى 3.

fn main() {
    let mut v = Vec::new();
    v.push("a");
    v.push("b");
    v.push("c");
    println!("len = {}", v.len());
}

الإزالة باستخدام pop

تزيل الطريقة pop العنصر الأخير وتُرجعه داخل Option. تحصل عادةً على Some(value)، أو على None إذا كان المتجه فارغًا مسبقًا.

يؤدي ذلك إلى تقليل طول المتجه بمقدار واحد.

fn main() {
    let mut v = vec![1, 2, 3];
    let last = v.pop();
    println!("popped {:?}", last);
    println!("now {:?}", v);
}

الإدراج في الوسط

تضع الطريقة insert قيمةً عند فهرس محدد، وتحرك العناصر اللاحقة إلى اليمين. يجب أن يتراوح الفهرس من 0 إلى الطول الحالي.

ندرج هنا القيمة 99 في الموضع 1.

fn main() {
    let mut v = vec![10, 20, 30];
    v.insert(1, 99);
    println!("{:?}", v);
}

الإزالة حسب الفهرس

تحذف الطريقة remove العنصر الموجود عند فهرس معين، وتُرجعه، ثم تحرك العناصر اللاحقة إلى اليسار لملء الفراغ.

انتبه: تؤدي إزالة فهرس غير موجود إلى حدوث panic.

fn main() {
    let mut v = vec![10, 20, 30];
    let gone = v.remove(0);
    println!("removed {}", gone);
    println!("{:?}", v);
}

الإزالة السريعة باستخدام swap_remove

عندما لا يكون الترتيب مهمًا، تكون swap_remove أسرع. فهي تنقل العنصر الأخير إلى الموضع المُزال بدلًا من تحريك جميع العناصر.

يغير ذلك الترتيب، لكنه يتجنب تكلفة التحريك.

fn main() {
    let mut v = vec![1, 2, 3, 4];
    let x = v.swap_remove(0);
    println!("took {}", x);
    println!("{:?}", v);
}

مسح كل شيء

تزيل الطريقة clear جميع العناصر دفعة واحدة، وتترك متجهًا فارغًا طوله 0. ويحتفظ المتجه بسعته المحجوزة لإعادة استخدامها.

تفيد هذه الطريقة عندما تريد إعادة تعبئة المتجه من البداية.

fn main() {
    let mut v = vec![1, 2, 3];
    v.clear();
    println!("empty? {}", v.is_empty());
}

اقتطاع المتجه إلى طول محدد

تقصّر الطريقة truncate المتجه إلى طول تختاره، وذلك بحذف العناصر الزائدة من النهاية. وإذا كان المتجه أقصر من ذلك مسبقًا، فلا يحدث شيء.

نحتفظ هنا بالعنصرين الأولين فقط.

fn main() {
    let mut v = vec![1, 2, 3, 4, 5];
    v.truncate(2);
    println!("{:?}", v);
}

الضم باستخدام extend

تلحق الطريقة extend بكل عناصر مجموعة أخرى. وهي تشبه استدعاء push لكل عنصر، لكن في خطوة واحدة.

تُضاف قائمة ثانية أدناه إلى نهاية القائمة الأولى.

fn main() {
    let mut v = vec![1, 2];
    v.extend(vec![3, 4, 5]);
    println!("{:?}", v);
}

الإبقاء على بعض العناصر باستخدام retain

تُبقي الطريقة retain على العناصر التي تجتاز اختبارًا فقط، وتزيل البقية في مواضعها. وتمرر إليها دالة إغلاق تُرجع قيمة من النوع bool.

نُبقي هنا على الأعداد الزوجية فقط.

fn main() {
    let mut v = vec![1, 2, 3, 4, 5, 6];
    v.retain(|n| n % 2 == 0);
    println!("{:?}", v);
}

ترتيب العناصر

تعيد الطريقة sort ترتيب العناصر من الأصغر إلى الأكبر في مواضعها. ولا تغير الطول، بل تغير الترتيب فقط.

يتطلب الترتيب أن يكون المتجه mut.

fn main() {
    let mut v = vec![3, 1, 4, 1, 5];
    v.sort();
    println!("{:?}", v);
}

تحقق سريع

اختبر مدى فهمك لتكبير المتجهات وتصغيرها.

مراجعة

كبّرت المتجهات باستخدام push وinsert وextend، وصغّرتها باستخدام pop وremove وswap_remove وclear وtruncate.

كما صفيت العناصر باستخدام retain ورتبتها باستخدام sort. ستتعلم بعد ذلك تخزين البنى داخل المتجهات.

الأسئلة الشائعة

هل درس «التوسيع والتقليص» مجاني؟

نعم — نص درس «التوسيع والتقليص» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

ماذا ستتعلم في «التوسيع والتقليص»؟

أدرج العناصر وأزلها وغيّر الحجم تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟

لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «التوسيع والتقليص»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟

نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إنشاء المتجهات وملؤها
  2. الفهرسة والتكرار
  3. التوسيع والتقليص
  4. متجهات من Structs
← العودة إلى Learn Rust Coding