تخطيط القيم من مصفوفتين في روبي

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

فهم المشكلة

في بايثون، قد تستخدم عادةً دالة map() لدمج قائمتين عنصر بعنصر، غالبًا ما تتبعها دالة reduce() لتجميع تلك النتائج. كمطور روبي، قد تجد أن الطرق المكافئة تختلف قليلاً، مما يؤدي إلى الارتباك عند محاولة تنفيذ وظيفة مشابهة.

على سبيل المثال، في بايثون، يمكنك التعبير عن عمليتك كما يلي:

sum = reduce(lambda x, y: x + y, map(lambda x, y: x * y, weights, data))

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

الحل في روبي

في روبي، تتيح لك دالة zip دمج مصفوفتين في مصفوفة واحدة من الأزواج، والتي يمكنك معالجتها باستخدام map و reduce. إليك كيفية إنجاز نفس العملية في روبي، باستخدام طريقة مختصرة.

تفصيل خطوة بخطوة

  1. دمج المصفوفات باستخدام zip: تتيح لك دالة zip دمج العناصر من كلا المرتبتين.

  2. استخدام map: بمجرد دمجها معًا، يمكنك استخدام دالة map لأداء عمليات على كل زوج من العناصر.

  3. التقليل باستخدام reduce: أخيرًا، استخدم reduce لتجميع النتائج.

إليك كيف يبدو كود روبي النهائي الخاص بك:

weights.zip(data).map(&:*).reduce(:+)

توضيح كل خطوة

  • weights.zip(data): يدمج مصفوفتي weights و data في أزواج. إذا كانت weights = [2, 3] و data = [4, 5]، ستكون النتيجة [[2, 4], [3, 5]].

  • map(&:*): صيغة &:* هي اختصار في روبي، حيث يتم تطبيق الكتلة &:* على كل زوج من الأزواج المدمجة. يضرب بفعالية كل زوج: مما ينتج [8, 15] للمثال السابق.

  • reduce(:+): أخيرًا، تقوم هذه الدالة بجمع جميع المنتجات، مما يعطيك الإجمالي. في حالتنا، 8 + 15 تعطي 23.

استخدام ActiveSupport (روبي 1.8)

إذا كنت تستخدم روبي على Rails أو لديك وصول إلى ActiveSupport في روبي 1.8، يمكنك إنجاز نفس المهمة باستخدام ميزة أخرى:

weights.zip(data).map(&:*).reduce(&:+)

هذا الاستخدام يعزز من قابلية القراءة وهو مألوف لمن يأتون من خلفية برمجة وظيفية.

الخلاصة

تخطيط القيم من مصفوفتين وتقليلها في روبي ليس فقط بسيطًا بل أيضًا فعال جدًا. مع الجمع بين zip و map و reduce، لديك أدوات قوية للتعامل مع عمليات البيانات المعقدة بكل سهولة.

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

ترميز سعيد!