Menu
Coddy logo textTech

Hash.new עם ערכי ברירת מחדל

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 33 מתוך 56.

כברירת מחדל, חיפוש של מפתח חסר בגיבוב מחזיר 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.new(0), ואז הדפס רק את הקטגוריות שסכומן הכולל הוא לפחות 20, אחת בכל שורה, ממוינות לפי הסכום בסדר יורד:

<category>: <total>

עבור קלט הדוגמה שלמעלה, הפלט הוא:

gas: 45
books: 25
food: 20

אם אף קטגוריה לא מגיעה ל-20, אל תדפיס דבר.

נסו בעצמכם

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

# TODO: totals = Hash.new(0); צברו את הסכום לכל קטגוריה;
#       לאחר מכן הדפיסו את הקטגוריות שעבורן total >= 20, ממוינות לפי total בסדר יורד
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר Ruby אונליין