• 1

ما الفرق بين each وmap في المصفوفات في روبي؟

هل هنالك فروقات بين استخدام each وmap لأنني جرب استخدام كلتا حلقتي التكرار على نفس المصفوفة لكنني في النهاية حصلت على نتيجتين مختلفتين كما تظهر في هذا المثال:

hash = { "d" => [11, 22], "f" => [33, 44, 55] }

# case 1
hash.map {|k,vs| vs.map {|v| "#{k}:#{v}"}}.join(",")
=> "d:11,d:22,f:33,f:44,f:55"

# case 2
hash.map {|k,vs| vs.each {|v| "#{k}:#{v}"}}.join(",")
=> "11,22,33,44,55"

فما هي المشكلة؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

الفرق هو أن حلقة each تنفذ الكتلة المُقدمة لكل عنصر من المصفوفة ومن ثم ترجع المصفوفة نفسها.
أما map فهي تنفذ الكتلة المُقدمة لكل عنصر من المصفوفة أيضًا لكنها ترجع مصفوفة جديدة بالقيم الجديدة التي تم إرجاعها بعد تنفيذ الكتلة (block).
فعلى سبيل المثال لنفترض أن لدينا المصفوفة التالي:

arr = ["tokyo", "london", "rio"]

عندما ننفذ عليها حلقة each ستكون النتيجة كالتالي:

arr.each { |element| element.capitalize }
# => ["tokyo", "london", "rio"]

نلاحظ أن النتيجة هي نفس المصفوفة على الرغم من تنفيذ الشيفرة البرمجية الموجود داخل كتلة each لكن القيم التي تغيرت لم يتم إرجاعها.
لاحظ أنه عندما نعمل نفس الشيء مع map فسيتم إرجاع مصفوفة بالتغييرات التي أردناها:

arr.map { |element| element.capitalize }
# => ["Tokyo", "London", "Rio"]
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن