محتويات الجدول
ما هو Array#shift؟
في روبي، Array#shift
هو أسلوب يقوم بإزالة وإرجاع العنصر الأول من المصفوفة. وهو أسلوب مُدمّر، مما يعني أنه يُعدّل المصفوفة الأصلية مباشرةً. إذا كانت المصفوفة فارغة، فإنه يُعيد nil
.
كيفية استخدام Array#shift
التركيب بسيط:
my_array = [1, 2, 3, 4, 5]
first_element = my_array.shift
puts first_element # الإخراج: 1
puts my_array.inspect # الإخراج: [2, 3, 4, 5]
هنا، يقوم shift
بإزالة الرقم 1 من بداية my_array
، ويتم تعيينه إلى first_element
. وتتغير المصفوفة الأصلية بشكل دائم الآن.
مثال: مصفوفة فارغة
empty_array = []
removed_element = empty_array.shift
puts removed_element # الإخراج: nil
puts empty_array.inspect # الإخراج: []
مثال: سلاسل متعددة لـ shift
my_array = [1, 2, 3, 4, 5]
first = my_array.shift
second = my_array.shift
puts first # الإخراج: 1
puts second # الإخراج: 2
puts my_array.inspect # الإخراج: [3, 4, 5]
مثال: التكرار باستخدام shift
my_array = [1, 2, 3, 4, 5]
while element = my_array.shift
puts element
end
# الإخراج:
# 1
# 2
# 3
# 4
# 5
بدائل لـ shift
إذا كنت بحاجة إلى الحفاظ على المصفوفة الأصلية، استخدم Array#dup
لإنشاء نسخة قبل استدعاء shift
. بدلاً من ذلك، لمزيد من التحكم في إزالة العناصر، ضع في اعتبارك هذه الخيارات:
Array#slice!(0)
: يقوم بإزالة وإرجاع العنصر الأول. مشابه لـshift
ولكنه يسمح بإزالة أكثر من عنصر واحد من خلال تحديد نطاق.Array#take(n)
: يُعيد أولn
عناصر دون تعديل المصفوفة الأصلية.Array#drop(n)
: يُعيد مصفوفة جديدة تحتوي على جميع العناصر باستثناء أولn
عناصر.
اعتبارات الأداء
تُعقّد زمن Array#shift
هو O(n) لأن جميع العناصر اللاحقة تحتاج إلى تحويل موضع واحد إلى اليسار. ومع ذلك، فإن تنفيذ روبي يستخدم مصفوفات ديناميكية، مما يجعل تعقيد الزمن المُتوسط أقرب غالباً إلى O(1) نظرًا لإدارة الذاكرة الفعالة. بالنسبة للمصفوفات الكبيرة، قد يصبح الفرق في الأداء بين shift
والبدائل ملحوظًا. إذا كان الأداء أمرًا بالغ الأهمية بالنسبة للمصفوفات الكبيرة جدًا، ففكر في البدائل التي تتجنب تحويل العناصر (مثل استخدام مُعدد).
الخلاصة
يوفر Array#shift
طريقة ملائمة لإزالة والوصول إلى العنصر الأول من المصفوفة في روبي. إن فهم طبيعته المُدمّرة والبدائل المتاحة أمر بالغ الأهمية لكتابة كود فعال وقابل للصيانة. اختر الأسلوب الذي يناسب احتياجاتك بشكل أفضل، مع مراعاة ما إذا كنت بحاجة إلى الحفاظ على المصفوفة الأصلية وحجم البيانات.