Hash.new עם ערכי ברירת מחדל
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 33 מתוך 56.
כברירת מחדל, חיפוש של מפתח חסר בגיבוב מחזיר nil:
scores = {}
puts scores["Alice"] # nilHash.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, המפתח נוסף עם הערך החדש.
אתגר
קלקרא רשימה מופרדת בפסיקים של רשומות 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 בסדר יורד
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
סקירה של מתודות למחרוזותאינטרפולציה של מחרוזותמעבר על מחרוזותפיצול וחיבורסיכום – שוזר המחרוזות4בלוקים, Procs ו־Lambdas
מהו בלוק?do..end לעומת סוגריים מסולסליםמילת המפתח yieldפרמטרים של בלוקProcs ו־Lambdasסיכום – איטרטור מותאם אישית7Hashes חלק 2
Hash.new עם ערכי ברירת מחדלמעבר על HashesHashes מקונניםמיזוג ושינויסיכום - מונה תדירויות10פרויקט - רשומות תלמידים
סקירת הפרויקטהוספת תלמיד5עוצמת Enumerable
Select ו־Rejectשרשור MapReduce / Injectcount, all?, any?, none?group_by ו־partitionsort_by, min_by, max_byסיכום - צינור נתוניםתרגלו בעצמכם: קומפיילר Ruby אונליין