Menu
Coddy logo textTech

Hashes מקוננים

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

ערך hash יכול להיות בעצמו hash. צורה מקוננת זו היא הדרך שבה קוד Ruby מייצג בדרך כלל רשומות מובנות: hash יחיד שמפתחיו הם מזהים (או שמות), כאשר כל ערך מכיל שדות משלו:

students = {
  "Alice" => { age: 20, grade: "A" },
  "Bob"   => { age: 22, grade: "B" }
}

כדי להגיע לערך מקונן, שרשרו את החיפושים:

puts students["Alice"][:age]    # 20
puts students["Bob"][:grade]    # B

הוספת שדה חדש לאחת מהמפות הפנימיות פועלת באותו אופן:

students["Alice"][:major] = "Math"
puts students["Alice"]
# {age: 20, grade: "A", major: "Math"}

כדי לקרוא בבטחה מתוך גיבוב מקונן שעשוי להיות חסר בו מפתח בכל רמה, dig עובר לאורך השרשרת ומחזיר nil אם משהו חסר בדרך:

students.dig("Alice", :grade)   # "A"
students.dig("Cara",  :grade)   # nil
challenge icon

אתגר

בינוני

נתון hash מקונן בשם inventory: כל מפתח ברמה העליונה הוא מחלקה, כל מפתח פנימי הוא פריט, וכל ערך פנימי הוא הכמות במלאי (מספר שלם).

קראו שורת קלט אחת: רשימה מופרדת בפסיקים של נתיבי חיפוש בפורמט department/item.

עבור כל נתיב, לפי הסדר, השתמשו ב־dig כדי למצוא את הערך. הדפיסו אחת מהאפשרויות הבאות:

  • <department>/<item>: <qty> כאשר הנתיב קיים
  • <department>/<item>: missing כאשר dig מחזירה nil

לאחר הדפסת כל השורות, הדפיסו גם שורת סיכום אחת:

Total inventory: <sum>

הסכום הכולל הוא סכום כל הכמויות בכל המחלקות ב־hash המקורי. השתמשו באיטרציה מקוננת (כל מחלקה, ואז כל פריט).

עבור הקלט fruits/apples,meat/beef,fruits/dragonfruit,dairy/milk, הפלט הוא:

fruits/apples: 12
meat/beef: 7
fruits/dragonfruit: missing
dairy/milk: 9
Total inventory: 39

נסו בעצמכם

inventory = {
  fruits: { apples: 12, bananas: 4 },
  meat:   { beef: 7, chicken: 5 },
  dairy:  { milk: 9, cheese: 2 }
}
lookups = gets.chomp.split(",")

# TODO: עבור כל חיפוש, השתמשו ב-dig והדפיסו את qty או 'missing'.
#       לאחר מכן הדפיסו 'Total inventory: <sum>' עבור כל הפריטים.
quiz iconבחנו את עצמכם

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

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

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