الفرق هو أن حلقة 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"]