reduce وeach_with_object
تجميع المجموعات
reduce وeach_with_object درس مجاني في Ruby Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ruby Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ruby Academy 4 دروس في المجموع.
ما هو reduce؟
يجمع reduce، وهو اسم مستعار لـinject، جميع العناصر في قيمة واحدة. وتتلقى الكتلة قيمة تراكمية والعنصر الحالي.
sum = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts sumآلية عمل القيمة التراكمية
تحمل القيمة التراكمية النتيجة المتراكمة بين التكرارات. وأي قيمة تعيدها الكتلة تصبح القيمة التراكمية التالية.
[1, 2, 3].reduce(0) do |acc, n|
puts "acc=#{acc} n=#{n}"
acc + n
endreduce دون قيمة ابتدائية
من دون قيمة ابتدائية، يصبح العنصر الأول هو القيمة التراكمية، ويبدأ التكرار من العنصر الثاني.
puts [10, 20, 30].reduce { |acc, n| acc + n }reduce باستخدام Symbol
بالنسبة إلى المعاملات البسيطة، مرّروا Symbol مثل :+ أو :* بدلًا من كتلة.
puts [1, 2, 3, 4].reduce(:+)
puts [1, 2, 3, 4].reduce(:*)العثور على أكبر قيمة
يمكن لـ reduce حساب أمور تتجاوز المجاميع، مثل العثور على أكبر قيمة.
nums = [3, 9, 2, 7]
max = nums.reduce { |acc, n| n > acc ? n : acc }
puts maxبناء سلسلة نصية
يمكن أن تكون القيمة التراكمية من أي نوع، بما في ذلك سلسلة نصية تبنونها تدريجيًا.
letters = ["r", "u", "b", "y"]
word = letters.reduce("") { |acc, c| acc + c.upcase }
puts wordما هو each_with_object؟
يشبه each_with_object reduce، لكنكم تمرّرون إليه كائنًا قابلًا للتغيير ويُعاد تلقائيًا. وتغيّرون الكائن داخل الكتلة.
result = [1, 2, 3].each_with_object([]) do |n, arr|
arr << n * 2
end
puts result.inspectبناء hash
يُعد each_with_object مثاليًا لبناء hash، لأنكم لا تحتاجون إلى إعادة الكائن في كل مرة.
words = ["apple", "pear"]
lengths = words.each_with_object({}) do |w, h|
h[w] = w.length
end
puts lengthsعدّ مرات الظهور
اجمعوا بين hash ذات قيمة افتراضية وeach_with_object لإحصاء العناصر.
votes = ["a", "b", "a", "a"]
tally = votes.each_with_object(Hash.new(0)) do |v, h|
h[v] += 1
end
puts tallyreduce مقارنةً بـ each_with_object
استخدموا reduce عندما تعيد كل خطوة قيمة جديدة، مثل المجاميع وحواصل الضرب. واستخدموا each_with_object عندما تعدّلون حاوية واحدة، مثل المصفوفات وhash.
puts [1, 2, 3].reduce(:+)
puts [1, 2, 3].each_with_object([]) { |n, a| a << n }.inspectاختصار tally
لإجراء العد، تحتوي Ruby على أسلوب tally مضمّن يتولى المهمة نيابةً عنكم.
puts ["a", "b", "a"].tallyاختبار سريع
تحققوا من مهاراتكم في التجميع.
مراجعة
يمكنكم الآن تجميع المجموعات:
reduce/injectباستخدام قيمة تراكمية أو قيمة ابتدائية أو Symboleach_with_objectلبناء المصفوفات وhashtallyلإجراء عمليات العد بسرعة- اختيار reduce للقيم الجديدة، وeach_with_object للحاويات القابلة للتغيير
الدورة التالية: الأعداد والرياضيات.
puts (1..5).reduce(:*)الأسئلة الشائعة
هل درس «reduce وeach_with_object» مجاني؟
نعم — نص درس «reduce وeach_with_object» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ruby Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ruby Academy 4 دروس في المجموع.
ماذا ستتعلم في «reduce وeach_with_object»؟
تجميع المجموعات تتمرن على Ruby Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Ruby Academy؟
لا تُشترط خبرة سابقة. Ruby Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «reduce وeach_with_object»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Ruby Academy هذا؟
نعم. كل درس في Ruby Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إنشاء النطاقات
- وحدة Enumerable
- map وselect وreject
- reduce وeach_with_object