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 ولكن لا يقوم بتخزين المفتاح عند قراءته. يظل الـ hash فارغاً حتى تقوم بالتعيين. لذا بمجرد كتابة counts[letter] += 1، يتم إضافة المفتاح بالقيمة الجديدة.

challenge icon

التحدي

سهل

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

<category>: <total>

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

gas: 45
books: 25
food: 20

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

جرّب بنفسك

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

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

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

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

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