المجموعات الجزئية والشاملة
جزء من قسم المنطق والتدفق في رحلة 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هذه المسندات الثلاثة هي الطريقة الأكثر وضوحاً للتعبير عن "الأذونات المطلوبة" أو قواعد "الكل" / "لا شيء" دون كتابة حلقة تكرار يدوية.
التحدي
متوسطأنت تتحقق من صلاحيات الوصول لمستند. اقرأ ثلاثة أسطر:
- صلاحيات المستخدم (مفصولة بفاصلة)
- الصلاحيات المطلوبة (مفصولة بفاصلة)
- الصلاحيات المحظورة (مفصولة بفاصلة)
يُمنح المستخدم حق الوصول عندما:
- تكون صلاحياته مجموعة شاملة (superset) للصلاحيات المطلوبة (أي يمتلك كل صلاحية مطلوبة)
- تكون صلاحياته منفصلة (disjoint) عن الصلاحيات المحظورة
اطبع واحداً فقط مما يلي:
grantedmissing: <...>عندما تكون هناك صلاحيات مطلوبة مفقودة (مرتبة، ومفصولة بفاصلة). اطبع هذا حتى لو كانت هناك صلاحيات محظورة ممتلكة أيضاً.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: تم المنح | مفقود: ... | محظور: ...
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق والتدفق
1النصوص بعمق
العد والفهارسحالة الأحرف وإزالة الفراغاتالبحث في النصوصتقسيم ودمج النصوصاستبدال النصوص الفرعيةمراجعة - التحقق من اسم المستخدم4المجموعات
إنشاء المجموعاتالاتحاد والتقاطعالطرح والفرق المتماثلالمجموعات الجزئية والشاملةمراجعة - تصفية الـ Tag7مشروع - متتبع العادات
نظرة عامة على المشروعتحديد كمكتمل2النطاقات والخطوات
المغلقة مقابل نصف المفتوحةالخطوة (Stride)دوال النطاقاتالنطاقات في Switchملخص - شبكة التقويم5الدوال من الرتبة العليا - الجزء الأول
MapFilterReduceربط Map و Filter و Reduceمراجعة - إحصائيات الكلمات