تخطَّ إلى المحتوى

المجموعات

يوفر كنوز عدة أنواع من المجموعات لتخزين البيانات بطرق مختلفة.

المتجه هو مجموعة ديناميكية يمكن أن يتغير حجمها.

// متجه فارغ
دع متغير أعداد: متجه<صحيح> = متجه[];
// متجه بقيم أولية
دع متغير فواكه: متجه<نص> = متجه["تفاح", "موز", "برتقال"];
دع متغير قائمة: متجه<صحيح> = متجه[];
// إضافة للنهاية
قائمة.ادفع(10);
قائمة.ادفع(20);
قائمة.ادفع(30);
// حذف من النهاية
دع آخر = قائمة.انزع(); // يُرجع 30
دع أعداد: متجه<صحيح> = متجه[1, 2, 3, 4, 5];
// بالفهرس
دع أول = أعداد[0]; // 1
دع ثاني = أعداد[1]; // 2
// تعديل عنصر
دع متغير قابل: متجه<صحيح> = متجه[1, 2, 3];
قابل[0] = 100; // الآن [100, 2, 3]
دع أعداد: متجه<صحيح> = متجه[10, 20, 30];
// الطول
دع ط = أعداد.طول(); // 3
// هل فارغ؟
إذا أعداد.طول() == 0 {
اطبع("المتجه فارغ");
}
دع فواكه: متجه<نص> = متجه["تفاح", "موز", "برتقال"];
// التكرار المباشر
لكل فاكهة في فواكه {
اطبع(فاكهة);
}
// مع الفهرس
دع متغير ف = 0;
لكل فاكهة في فواكه {
اطبع_صحيح(ف);
اطبع(فاكهة);
ف += 1;
}

القاموس يخزن أزواج مفتاح-قيمة.

// قاموس فارغ
دع متغير درجات: قاموس<نص, صحيح> = قاموس[];
// لا يوجد إنشاء بقيم أولية، أضف العناصر بعد الإنشاء
درجات.أضف("رياضيات", 95);
درجات.أضف("فيزياء", 88);
درجات.أضف("كيمياء", 92);
دع متغير أعمار: قاموس<نص, صحيح> = قاموس[];
// إضافة
أعمار.أضف("أحمد", 25);
أعمار.أضف("محمد", 30);
// التعديل (بنفس الطريقة)
أعمار.أضف("أحمد", 26); // تحديث القيمة
دع متغير بيانات: قاموس<نص, صحيح> = قاموس[];
بيانات.أضف("س", 10);
بيانات.أضف("ص", 20);
// القراءة ترجع اختياري
طابق بيانات.اقرأ("س") {
بعض(قيمة) => {
اطبع_صحيح(قيمة); // 10
}
عدم => {
اطبع("المفتاح غير موجود");
}
}
دع متغير قاموسي: قاموس<نص, صحيح> = قاموس[];
قاموسي.أضف("مفتاح", 100);
// الحذف
قاموسي.احذف("مفتاح");
دع متغير قاموسي: قاموس<نص, نص> = قاموس[];
قاموسي.أضف("اسم", "أحمد");
إذا قاموسي.يحتوي("اسم") {
اطبع("المفتاح موجود");
}
دع متغير درجات: قاموس<نص, صحيح> = قاموس[];
درجات.أضف("رياضيات", 95);
درجات.أضف("فيزياء", 88);
درجات.أضف("كيمياء", 92);
// التكرار على الأزواج
لكل (مادة, درجة) في درجات {
اطبع(مادة);
اطبع_صحيح(درجة);
}
دالة عد_كلمات(كلمات: متجه<نص>) -> قاموس<نص, صحيح> {
دع متغير عداد: قاموس<نص, صحيح> = قاموس[];
لكل كلمة في كلمات {
طابق عداد.اقرأ(كلمة) {
بعض(عدد) => {
عداد.أضف(كلمة, عدد + 1);
}
عدم => {
عداد.أضف(كلمة, 1);
}
}
}
أرجع عداد;
}
هيكل ذاكرة_مؤقتة<ن> {
بيانات: قاموس<نص, ن>
}
نفذ<ن> ذاكرة_مؤقتة<ن> {
دالة جديد() -> ذاتي {
أرجع ذاتي {
بيانات: قاموس[]
};
}
دالة أضف(&متغير ذاتي, مفتاح: نص, قيمة: ن) {
ذاتي.بيانات.أضف(مفتاح, قيمة);
}
دالة اقرأ(&ذاتي, مفتاح: نص) -> اختياري<ن> {
أرجع ذاتي.بيانات.اقرأ(مفتاح);
}
}
هيكل مهمة {
عنوان: نص,
مكتملة: منطقي
}
هيكل قائمة_مهام {
مهام: متجه<مهمة>
}
نفذ قائمة_مهام {
دالة جديد() -> ذاتي {
أرجع ذاتي {
مهام: متجه[]
};
}
دالة أضف(&متغير ذاتي, عنوان: نص) {
ذاتي.مهام.ادفع(مهمة {
عنوان: عنوان,
مكتملة: خطأ
});
}
دالة أكمل(&متغير ذاتي, فهرس: صحيح) {
ذاتي.مهام[فهرس].مكتملة = صح;
}
دالة عدد_المكتملة(&ذاتي) -> صحيح {
دع متغير عداد = 0;
لكل مهمة في ذاتي.مهام {
إذا مهمة.مكتملة {
عداد += 1;
}
}
أرجع عداد;
}
}
هيكل طالب {
اسم: نص,
صف: نص,
درجة: صحيح
}
دالة تجميع_بالصف(طلاب: متجه<طالب>) -> قاموس<نص, متجه<طالب>> {
دع متغير مجموعات: قاموس<نص, متجه<طالب>> = قاموس[];
لكل طالب في طلاب {
طابق مجموعات.اقرأ(طالب.صف) {
بعض(متغير قائمة) => {
قائمة.ادفع(طالب);
}
عدم => {
دع متغير قائمة_جديدة: متجه<طالب> = متجه[];
قائمة_جديدة.ادفع(طالب);
مجموعات.أضف(طالب.صف, قائمة_جديدة);
}
}
}
أرجع مجموعات;
}
الخاصيةالمصفوفةالمتجهالقاموس
الحجمثابتمتغيرمتغير
الوصولبالفهرس O(1)بالفهرس O(1)بالمفتاح O(1)
الإضافة❌✅ O(1)*✅ O(1)*
الحذف❌✅✅
الترتيبمحفوظمحفوظغير مضمون

* في المتوسط