Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

المجموعات الجزئية والشاملة

جزء من قسم المنطق والتدفق في رحلة 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. الصلاحيات المحظورة (مفصولة بفاصلة)

يُمنح المستخدم حق الوصول عندما:

  • تكون صلاحياته مجموعة شاملة (superset) للصلاحيات المطلوبة (أي يمتلك كل صلاحية مطلوبة)
  • تكون صلاحياته منفصلة (disjoint) عن الصلاحيات المحظورة

اطبع واحداً فقط مما يلي:

  • granted
  • missing: <...> عندما تكون هناك صلاحيات مطلوبة مفقودة (مرتبة، ومفصولة بفاصلة). اطبع هذا حتى لو كانت هناك صلاحيات محظورة ممتلكة أيضاً.
  • forbidden: <...> عندما لا تكون هناك صلاحيات مطلوبة مفقودة ولكن توجد صلاحيات محظورة ممتلكة (مرتبة، ومفصولة بفاصلة)

للمدخلات read,write,admin / read,write / delete، المخرج هو granted.

للمدخلات read / read,write / delete، المخرج هو missing: write.

ورقة مرجعية

طرق مقارنة المجموعات (Set) في لغة Swift:

let small: Set = [1, 2]
let big:   Set = [1, 2, 3, 4]

small.isSubset(of: big)      // true – كل عنصر في small موجود في big
big.isSuperset(of: small)    // true – big تحتوي على كل عنصر في small

let evens: Set = [2, 4, 6]
let odds:  Set = [1, 3, 5]
evens.isDisjoint(with: odds) // true – لا توجد عناصر مشتركة

جرّب بنفسك

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

// TODO: تم المنح | مفقود: ... | محظور: ...
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق والتدفق