Menu
Coddy logo textTech

תת-קבוצה ועל-קבוצה

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

מעבר לשילוב קבוצות, אפשר גם להשוות ביניהן.

isSubset(of:) עונה על השאלה "האם כל אחד מהאיברים שלי נמצא גם בקבוצה השנייה?"

let small: Set = [1, 2]
let big:   Set = [1, 2, 3, 4]
small.isSubset(of: big)            // true
big.isSubset(of: small)            // false

isSuperset(of:) הוא ההפך: "האם אני מכיל כל איבר בקבוצה האחרת?":

big.isSuperset(of: small)          // true

isDisjoint(with:) מחזירה true כאשר לשתי הקבוצות אין כלל איברים משותפים:

let evens: Set = [2, 4, 6]
let odds:  Set = [1, 3, 5]
evens.isDisjoint(with: odds)       // true

שלושת הפרדיקטים האלה הם הדרך הנקייה ביותר לבטא כללים של „הרשאות נדרשות” או „הכול מתוך” / „אף אחד מתוך”, בלי לכתוב לולאה ידנית.

challenge icon

אתגר

בינוני

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

  1. ההרשאות של המשתמש (מופרדות בפסיקים)
  2. ההרשאות הנדרשות (מופרדות בפסיקים)
  3. ההרשאות האסורות (מופרדות בפסיקים)

המשתמש מקבל גישה כאשר:

  • ההרשאות שלו הן קבוצת-על של ההרשאות הנדרשות (כל ההרשאות הנדרשות נמצאות ברשותו)
  • ההרשאות שלו זרות להרשאות האסורות

הדפיסו בדיוק אחת מהאפשרויות הבאות:

  • granted
  • missing: <...> כאשר חסרות הרשאות נדרשות (ממוינות, מופרדות בפסיקים). הדפיסו זאת גם אם יש למשתמש הרשאות אסורות.
  • forbidden: <...> כאשר לא חסרות הרשאות נדרשות, אך יש למשתמש הרשאות אסורות (ממוינות, מופרדות בפסיקים)

עבור הקלט read,write,admin / read,write / delete, הפלט הוא granted.

עבור הקלט read / read,write / delete, הפלט הוא missing: write.

נסו בעצמכם

let user = Set(readLine()!.components(separatedBy: ","))
let required = Set(readLine()!.components(separatedBy: ","))
let forbidden = Set(readLine()!.components(separatedBy: ","))

// TODO: granted | missing: ... | forbidden: ...
quiz iconבחנו את עצמכם

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

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

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