מעבר על מערכים דו־ממדיים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 12 מתוך 56.
כדי לעבור על כל תא במערך דו־ממדי, מקננים שתי איטרציות. הלולאה החיצונית עוברת על השורות; הלולאה הפנימית עוברת על העמודות באותה שורה.
התבנית האידיומטית ביותר ב-Ruby משתמשת ב-each פעמיים:
grid = [
[1, 2, 3],
[4, 5, 6]
]
grid.each do |row|
row.each do |cell|
puts cell
end
end
# 1, 2, 3, 4, 5, 6 (כל אחד בשורה נפרדת)אם אתה זקוק גם לאינדקסים של השורה והעמודה, למשל כדי לתת תווית לכל תא, השתמש ב־each_with_index בשתי הרמות:
grid.each_with_index do |row, r|
row.each_with_index do |cell, c|
puts "(#{r},#{c}) = #{cell}"
end
endהסגנון הזה קצר ובטוח יותר ממעקב ידני אחר אינדקסים; אין סכנה לחרוג מסוף השורה.
אתגר
קלמערך דו־ממדי grid נתון (3 שורות × 3 עמודות של מספרים שלמים).
עבור כל שורה, מצאו כל תא שהערך שלו גדול מהממוצע של אותה שורה בלבד. הדפיסו כל תא כזה בשורה נפרדת בפורמט:
(r,c) = valueהשתמשו ב־each_with_index מקונן. חשבו את הממוצע בתוך הלולאה החיצונית כדי שהסף של כל שורה יהיה עצמאי.
עבור מערך ברירת המחדל, התאים שהערך שלהם גדול מהממוצע של השורה שלהם הם:
(0,1) = 8
(1,2) = 9
(2,0) = 6
(2,1) = 7נסו בעצמכם
grid = [
[1, 8, 3],
[4, 5, 9],
[6, 7, 2]
]
# TODO: שימוש מקונן ב-each_with_index, הדפס תאים > הממוצע של השורה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
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סיכום - צינור נתונים3מערכים דו־ממדיים
יסודות המערכים הדו־ממדייםגישה לאיברים במערך דו־ממדימעבר על מערכים דו־ממדייםתבניות נפוצות במערכים דו־ממדייםסיכום – פעולות על מטריצותתרגלו בעצמכם: קומפיילר Ruby אונליין