תת-קבוצה ועל-קבוצה
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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) // falseisSuperset(of:) הוא ההפך: "האם אני מכיל כל איבר בקבוצה האחרת?":
big.isSuperset(of: small) // trueisDisjoint(with:) מחזירה true כאשר לשתי הקבוצות אין כלל איברים משותפים:
let evens: Set = [2, 4, 6]
let odds: Set = [1, 3, 5]
evens.isDisjoint(with: odds) // trueשלושת הפרדיקטים האלה הם הדרך הנקייה ביותר לבטא כללים של „הרשאות נדרשות” או „הכול מתוך” / „אף אחד מתוך”, בלי לכתוב לולאה ידנית.
אתגר
בינוניבודקים גישה למסמך. קראו שלוש שורות:
- ההרשאות של המשתמש (מופרדות בפסיקים)
- ההרשאות הנדרשות (מופרדות בפסיקים)
- ההרשאות האסורות (מופרדות בפסיקים)
המשתמש מקבל גישה כאשר:
- ההרשאות שלו הן קבוצת-על של ההרשאות הנדרשות (כל ההרשאות הנדרשות נמצאות ברשותו)
- ההרשאות שלו זרות להרשאות האסורות
הדפיסו בדיוק אחת מהאפשרויות הבאות:
grantedmissing: <...>כאשר חסרות הרשאות נדרשות (ממוינות, מופרדות בפסיקים). הדפיסו זאת גם אם יש למשתמש הרשאות אסורות.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: ...
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
תרגלו בעצמכם: Swift אונליין