Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

Hash.new مع القيم الافتراضية

جزء من قسم المنطق وتدفق العمليات في رحلة Ruby على Coddy. الدرس 33 من 56.

افتراضيًا، يؤدي البحث عن مفتاح مفقود في Hash إلى إرجاع nil:

scores = {}
puts scores["Alice"]   # nil

يغيّر Hash.new(default) ذلك. يُرجع كل مفتاح مفقود القيمة التي مرّرتها:

scores = Hash.new(0)
puts scores["Alice"]   # 0

هذه هي الطريقة الأنظف لكتابة عدّاد. لا تحتاج إلى التحقق من if scores[name].nil? قبل الزيادة:

counts = Hash.new(0)
["a", "b", "a", "c", "a"].each do |letter|
  counts[letter] += 1
end
puts counts.inspect   # {"a"=>3, "b"=>1, "c"=>1}

مهم: تعمل Hash.new(0) على تعيين القيمة الافتراضية إلى 0، لكنها لا تخزّن المفتاح عند قراءته. يظلّ التجزئة فارغًا حتى تُجري عملية إسناد. لذلك، بمجرد كتابة counts[letter] += 1، يُضاف المفتاح بالقيمة الجديدة.

challenge icon

التحدي

سهل

اقرأ قائمة مفصولة بفواصل من إدخالات category:amount (مثلًا food:12,gas:30,food:8,books:25,gas:15). أنشئ تجزئة لـ الإجماليات لكل فئة باستخدام Hash.new(0)، ثم اطبع فقط الفئات التي يبلغ إجماليها 20 على الأقل، كل فئة في سطر، مرتبة حسب الإجمالي تنازليًا:

<category>: <total>

بالنسبة إلى الإدخال المثال أعلاه، يكون الناتج:

gas: 45
books: 25
food: 20

إذا لم تصل أي فئة إلى 20، فلا تطبع شيئًا.

جرّب بنفسك

entries = gets.chomp.split(",")

# TODO: totals = Hash.new(0); اجمع المبلغ لكل فئة;
#       ثم اطبع الفئات ذات الإجمالي >= 20، مرتبة حسب الإجمالي تنازلياً
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق العمليات

تدرّب بنفسك: مترجم Ruby عبر الإنترنت