count, all?, any?, none?
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 24 מתוך 56.
ארבע מתודות Enumerable קטנות שעונות על שאלות לגבי אוסף בלי לאלץ אותך לכתוב לולאה.
count מחזירה את מספר האיברים שעומדים בתנאי של הבלוק:
[1, 2, 3, 4, 5].count { |n| n.even? } # 2
[1, 2, 3, 4, 5].count # 5 (ללא בלוק, הספירה הכוללת)all? הוא true כאשר כל איבר מקיים את הבלוק:
[2, 4, 6].all? { |n| n.even? } # true
[2, 4, 7].all? { |n| n.even? } # falseany? מחזיר true כאשר לפחות אחד מהם מקיים את התנאי:
[1, 2, 3].any? { |n| n.even? } # true
[1, 3, 5].any? { |n| n.even? } # falsenone? היא true כאשר אף אחד מהם אינו עושה זאת:
[1, 3, 5].none? { |n| n.even? } # trueהמתודות מפסיקות מוקדם: any? נעצרת בהתאמה הראשונה, ו־all? נעצרת בכישלון הראשון. הן יעילות.
אתגר
קלקרא רשימה של ציוני מבחנים המופרדים בפסיקים (מספרים שלמים). כיתה היא כיתה שעומדת בתנאי מעבר כאשר:
none?מהציונים שליליים (מבחן שלא נרשם)- כל הציונים הם לכל היותר
100 - ציון כלשהו הוא בדיוק
100(לפחות ציון מושלם אחד) - לפחות 3 ציונים הם
>= 70(השתמש ב-count)
הדפס שורה אחת בדיוק:
Valid: <count> passingכאשר כל ארבעת התנאים מתקיימים (countהוא מספר הציונים שהם>= 70)Invalidאחרת
עבור הקלט 72,80,100,65,90: יש 4 ציונים >= 70, אף אחד מהם אינו שלילי, כולם <= 100, ואחד מהם הוא 100, לכן הפלט הוא Valid: 4 passing.
עבור 72,80,90: יש 3 ציונים עוברים, אך אין ציון מושלם, לכן Invalid.
נסו בעצמכם
scores = gets.chomp.split(",").map(&:to_i)
# TODO: לשלב את all?, any?, none?, count כדי להחליט בין Valid ל-Invalid
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
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 אונליין