تربيع عناصر المصفوفة مهمة برمجية شائعة. توفر روبي عدة طرق أنيقة لتحقيق ذلك بكفاءة. تستعرض هذه المقالة أربعة طرق، وتقارن فعاليتها وقابليتها للقراءة.
جدول المحتويات
- الطريقة الأولى: استخدام طريقة
map
- الطريقة الثانية: استخدام طريقة
each
- الطريقة الثالثة: استخدام
each_with_index
- الطريقة الرابعة: استخدام
inject
- الخلاصة
- الأسئلة الشائعة
الطريقة الأولى: استخدام طريقة map
طريقة map
هي الطريقة الأكثر شيوعًا وفعالية لتربيع عناصر المصفوفة في روبي. فهي تتكرر على كل عنصر، وتطبق كتلة معينة من التعليمات البرمجية، وتعيد مصفوفة جديدة تحتوي على النتائج. تُفضل هذه الطريقة لأسلوبها الوظيفي ووضوحها، مما يضمن عدم تغيير المصفوفة الأصلية.
array = [1, 2, 3, 4, 5]
squared_array = array.map { |x| x**2 }
puts squared_array # الإخراج: [1, 4, 9, 16, 25]
الطريقة الثانية: استخدام طريقة each
تتكرر طريقة each
على كل عنصر ولكنها لا تعيد مصفوفة جديدة مباشرة. لتربيع العناصر باستخدام each
، يجب إنشاء مصفوفة جديدة وملؤها داخل الحلقة. وهذا أقل إيجازًا من استخدام map
.
array = [1, 2, 3, 4, 5]
squared_array = []
array.each { |x| squared_array << x**2 }
puts squared_array # الإخراج: [1, 4, 9, 16, 25]
الطريقة الثالثة: استخدام each_with_index
يوفر each_with_index
كل من العنصر ومؤشره أثناء التكرار. على الرغم من أنه ليس ضروريًا تمامًا للتربيع، إلا أنه مفيد للعمليات التي تعتمد على القيمة والموقع على حد سواء.
array = [1, 2, 3, 4, 5]
squared_array = []
array.each_with_index { |x, index| squared_array << x**2 }
puts squared_array # الإخراج: [1, 4, 9, 16, 25]
الطريقة الرابعة: استخدام inject
تجمع طريقة inject
(المعروفة أيضًا باسم reduce
) نتيجة على المصفوفة. على الرغم من قوتها، إلا أنها أقل وضوحًا للتربيع البسيط مقارنةً بـ map
وتضيف تعقيدًا غير ضروري.
array = [1, 2, 3, 4, 5]
squared_array = array.inject([]) { |result, x| result << x**2 }
puts squared_array # الإخراج: [1, 4, 9, 16, 25]
الخلاصة
لتربيع عناصر المصفوفة، توفر طريقة map
الحل الأكثر أناقة وفعالية. يجعلها إيجازها وأسلوبها الوظيفي الخيار المفضل. على الرغم من أن الطرق الأخرى تعمل، إلا أنها أقل ملاءمة نظرًا لتعقيدها أو إطنابها الإضافي.
الأسئلة الشائعة
س: هل يمكنني تعديل المصفوفة الأصلية؟ ج: تعديل المصفوفة الأصلية في مكانها ممكن، لكن إنشاء مصفوفة جديدة يُوصى به بشكل عام لتحسين وضوح التعليمات البرمجية ومنع الآثار الجانبية غير المقصودة.
س: ماذا عن العناصر غير العددية؟ ج: سيؤدي تربيع العناصر غير العددية إلى حدوث خطأ من نوع TypeError
. استخدم طرقًا مثل select
لتصفية العناصر غير العددية قبل التربيع.
س: هل هناك اختلافات في الأداء؟ ج: بالنسبة للمصفوفات الكبيرة، قد توجد اختلافات طفيفة في الأداء، ولكن map
مُحسّن بشكل كبير بشكل عام. عادةً ما تكون الاختلافات ضئيلة ما لم تكن تتعامل مع مجموعات بيانات ضخمة للغاية.