Menu
Coddy logo textTech

Reduce / Inject

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

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

הבלוק מקבל שני פרמטרים: הצובר והאיבר הנוכחי. ערך ההחזרה של הבלוק הופך לצובר הבא.

total = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts total   # 10

שלב אחר שלב, הערך המצטבר הוא 0 → 1 → 3 → 6 → 10.

הארגומנט הראשון הוא ערך ההתחלה של המצבר. אם משמיטים אותו, Ruby משתמשת באיבר הראשון של המערך:

[1, 2, 3, 4].reduce { |acc, n| acc * n }   # 24

עבור פעולות טהורות כמו סכום ומכפלה, Ruby מאפשרת לך קיצור דרך: להעביר סמל במקום בלוק:

[1, 2, 3, 4].reduce(:+)   # 10
[1, 2, 3, 4].reduce(:*)   # 24

ברגע שתוכל לבנות צובר מותאם אישית, תוכל לחשב כמעט כל דבר במעבר אחד.

challenge icon

אתגר

קל

קראו רשימה של מספרים שלמים המופרדים בפסיקים. הדפיסו שלוש שורות:

  1. הסכום (השתמשו ב־reduce(:+))
  2. המכפלה (השתמשו ב־reduce(:*))
  3. המספר המרבי, שמחושב באמצעות reduce ובלוק מפורש, לא באמצעות max.

עבור הקלט 2,5,3,8, הפלט הוא:

18
240
8

נסו בעצמכם

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: להדפיס את הסכום, המכפלה והערך המרבי (עם reduce + בלוק מפורש)
quiz iconבחנו את עצמכם

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

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

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