Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

إزالة العناصر

جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 13 من 66.

في بعض الأحيان تحتاج إلى إزالة عناصر من الـ vector، وليس فقط إضافتها. توفر Rust طريقتين رئيسيتين لإزالة العناصر، كل منهما مصممة لحالات مختلفة.

تزيل الطريقة .pop() العنصر الأخير من المتجه (vector) وتعيده:

let mut numbers = vec![10, 20, 30, 40];
let last = numbers.pop(); // تزيل 40، وتعيد Some(40)
// تصبح numbers الآن [10, 20, 30]

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

تقوم الطريقة .remove() بإزالة عنصر عند فهرس محدد وتعيد ذلك العنصر:

let mut fruits = vec!["apple", "banana", "cherry"];
let removed = fruits.remove(1); // تزيل "banana"
// fruits هي الآن ["apple", "cherry"]

عندما تستخدم .remove()، تنتقل جميع العناصر الموجودة بعد الفهرس الذي تمت إزالته إلى اليسار لملء الفجوة. يمكن أن تكون هذه العملية أبطأ بالنسبة للمتجهات (vectors) الكبيرة عند الإزالة من البداية أو المنتصف، نظرًا لأن العديد من العناصر تحتاج إلى النقل.

تتطلب كلتا الطريقتين أن يكون المتجه (vector) قابلاً للتغيير (mutable) لأنهما تعدلان محتوياته. اختر .pop() عندما تريد الإزالة من النهاية، و .remove() عندما تحتاج إلى الإزالة من موضع محدد.

challenge icon

التحدي

سهل

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

المتطلبات:

  • اقرأ المدخل الأول الذي يحتوي على أرقام مفصولة بفاصلة (على سبيل المثال، 10,20,30,40,50)
  • قم بتقسيم السلسلة النصية بواسطة الفواصل وحوّل كل رقم إلى عدد صحيح
  • أنشئ متجهًا قابلاً للتعديل (mutable vector) من هذه الأرقام
  • اقرأ المدخل الثاني وحوّله إلى عدد صحيح يمثل الفهرس
  • استخدم .remove() لإزالة العنصر الموجود في ذلك الفهرس
  • اطبع كل عنصر متبقٍ في سطر منفصل

المدخلات:

  • السطر الأول: أعداد صحيحة مفصولة بفاصلة (على سبيل المثال، 10,20,30,40,50)
  • السطر الثاني: عدد صحيح يمثل الفهرس المراد إزالته

المخرجات: اطبع كل عنصر متبقٍ من المتجه في سطر منفصل

ورقة مرجعية

يوفر Rust طريقتين رئيسيتين لإزالة العناصر من المتجهات (vectors):

تقوم الطريقة .pop() بإزالة العنصر الأخير وإرجاعه:

let mut numbers = vec![10, 20, 30, 40];
let last = numbers.pop(); // يزيل 40، ويعيد Some(40)
// numbers هي الآن [10, 20, 30]

تعيد .pop() نوع Option - Some(value) إذا تمت إزالة عنصر، أو None إذا كان المتجه فارغاً.

تقوم الطريقة .remove() بإزالة عنصر عند فهرس (index) محدد وإرجاعه:

let mut fruits = vec!["apple", "banana", "cherry"];
let removed = fruits.remove(1); // يزيل "banana"
// fruits هي الآن ["apple", "cherry"]

عند استخدام .remove()، تنتقل جميع العناصر الموجودة بعد الفهرس المزال إلى اليسار لملء الفجوة.

تتطلب كلتا الطريقتين أن يكون المتجه قابلاً للتغيير (mutable). استخدم .pop() للإزالة من النهاية، و .remove() للإزالة من موضع محدد.

جرّب بنفسك

use std::io;

fn main() {
    // قراءة الأرقام المفصولة بفاصلة
    let mut numbers_input = String::new();
    io::stdin().read_line(&mut numbers_input).expect("Failed to read line");
    
    // قراءة الفهرس المراد حذفه
    let mut index_input = String::new();
    io::stdin().read_line(&mut index_input).expect("Failed to read line");
    
    // TODO: اكتب كودك أدناه
    // 1. تقسيم numbers_input بواسطة الفواصل وتحويلها إلى أعداد صحيحة
    // 2. إنشاء متجه (vector) قابل للتعديل من هذه الأرقام
    // 3. تحويل index_input إلى عدد صحيح
    // 4. إزالة العنصر الموجود في الفهرس المحدد
    // 5. طباعة كل عنصر متبقٍ في سطر منفصل
    
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow