Ruby Tutorials

تربيع عناصر المصفوفة بكفاءة في روبي

Spread the love

تربيع عناصر المصفوفة مهمة برمجية شائعة. توفر روبي عدة طرق أنيقة لتحقيق ذلك بكفاءة. تستعرض هذه المقالة أربعة طرق، وتقارن فعاليتها وقابليتها للقراءة.

جدول المحتويات

الطريقة الأولى: استخدام طريقة 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 مُحسّن بشكل كبير بشكل عام. عادةً ما تكون الاختلافات ضئيلة ما لم تكن تتعامل مع مجموعات بيانات ضخمة للغاية.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *