מעבר על Hashes
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 34 מתוך 56.
Hash-ים ניתנים לסריקה, כך שאפשר לעבור עליהם בדיוק כמו על מערכים. יש שלוש תבניות נפוצות, בהתאם למה שרוצים.
each מספקת לך גם את המפתח וגם את הערך:
prices = { apple: 1, bread: 3, milk: 4 }
prices.each do |item, price|
puts "#{item}: $#{price}"
endeach_key עובר רק על המפתחות:
prices.each_key { |k| puts k } # apple, bread, milkeach_value עובר רק על הערכים:
prices.each_value { |v| puts v } # 1, 3, 4וכל המתודות של Enumerable שראית בפרק הקודם, map, select, reduce: פועלות גם על hashes. בכל איטרציה פשוט מקבלים זוג מפתח/ערך (או מערך בן 2 איברים):
prices.select { |item, price| price > 2 }
# {bread: 3, milk: 4}אתגר
בינוניאתם מחילים מבצע על מחירון. המילון prices נתון (סמל הפריט => מספר שלם של מחיר).
קראו שורת קלט אחת: רשימה מופרדת בפסיקים של פריטים שעליהם תינתן הנחה של 50% (התאמה לסמלים במילון, לפי שם).
הדפיסו, לפי הסדר הזה:
- שורה אחת לכל פריט בפורמט
<item>: $<final_price>, כאשר המחיר הסופי הוא הערך לאחר ההנחה אם הפריט נמצא ברשימת ההנחות, או הערך המקורי אחרת. עברו על הפריטים באמצעותeach. הפריטים נשארים בסדר המקורי שלהם. השתמשו בחלוקה של מספרים שלמים כדי לחשב את ההנחה (price / 2). Was: $<n>: הסכום המקורי (השתמשו ב-values.sum)Now: $<n>: הסכום לאחר ההנחה- שמות הפריטים שמחירם הסופי עדיין גבוה מ-
2, מופרדים באמצעות,(השתמשו ב-select+keysבמילון החדש)
עבור הקלט bread,milk עם המילון המוגדר כברירת מחדל, הפלט הוא:
apple: $1
bread: $1
milk: $2
cheese: $6
Was: $14
Now: $10
cheeseנסו בעצמכם
prices = { apple: 1, bread: 3, milk: 4, cheese: 6 }
discount = gets.chomp.split(",").map(&:to_sym)
# TODO: בנו hash של המחירים הסופיים באמצעות each; הדפיסו שורות, סכומים כוללים ופריטים יקרים
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
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 אונליין