0Pricing
Zig Academy · درس

القوائم الديناميكية باستخدام ArrayList

كبّروا مخزناً مؤقتاً مدعوماً بمخصّص

القوائم الديناميكية باستخدام ArrayList درس مجاني في Zig Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Zig Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Zig Academy 4 دروس في المجموع.

مخزن قابل للنمو

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

إنه نوع عام

إنّ ArrayList نوع عام: تحددون نوع العنصر مرة واحدة، وتحصلون على قائمة من ذلك النوع تحديدًا مع أمان نوعي كامل.

const List = std.ArrayList(i32);

أنشئوها باستخدام init

تنشئون قائمة باستخدام init، وتمرّرون إليها المخصّص الذي ستستخدمه للنمو. ويبقى المخصّص مرتبطًا بالقائمة طوال فترة وجودها.

var list = std.ArrayList(i32).init(allocator);

استخدموا deinit دائمًا

تمتلك القائمة ذاكرة على heap، لذا طابقوا init مع deinit لتحريرها. وتؤدي كتابة defer مباشرةً بعد init إلى جعل التنظيف تلقائيًا.

var list = std.ArrayList(i32).init(a);
defer list.deinit();

أضيفوا العناصر

أضيفوا عنصرًا واحدًا باستخدام append. وقد تحتاج العملية إلى توسيع المخزن، لذلك يمكن أن تفشل وتُستدعى باستخدام try.

try list.append(7);

الوصول إلى البيانات

توجد المحتويات الحالية في الشريحة .items. ويمكنكم قراءة هذه الشريحة وفهرستها والتكرار عليها كما تفعلون مع أي شريحة أخرى في Zig.

for (list.items) |n| std.debug.print("{}\n", .{n});

الطول والسعة

يمثل الطول list.items.len، أي عدد القيم التي خزّنتموها. أما السعة فهي المساحة المحجوزة، وقد تكون أكبر لتجنب إعادة النمو المتكررة.

احجزوا مسبقًا

إذا كنتم تعرفون حجمًا تقريبيًا، فاستدعوا ensureTotalCapacity أولًا. فالحجز مرة واحدة يتجنب إعادة التخصيص المتكررة مع امتلاء القائمة.

try list.ensureTotalCapacity(100);

أزيلوا العناصر

أزيلوا العنصر الأخير باستخدام pop، أو أزيلوا عنصرًا من المنتصف بحسب فهرسه. تقلل القائمة طولها، لكنها تحتفظ بسعتها.

const last = list.pop();

سلّموا الملكية

استدعوا toOwnedSlice لإخراج المخزن على هيئة شريحة عادية. تصبح القائمة فارغة، وتصبحون مسؤولين عن تحرير الشريحة.

const slice = try list.toOwnedSlice();

مبنية على الأساسيات

إنّ ArrayList ليست سوى alloc ونسخ وfree تُنفَّذ نيابةً عنكم. وهي توضّح مدى قوة المخصّصات الصريحة عند استخدامها مع نوع منظم قابل لإعادة الاستخدام. ✅

تحقق سريع

تذكّروا ما يجب فعله عند التوقف عن استخدام ArrayList.

مراجعة

تعلّمتم أن std.ArrayList تنمو ديناميكيًا باستخدام مخصّص للذاكرة: init، وappend مع try، وقراءة .items، ثم deinit دائمًا عند الانتهاء. 🎯

الأسئلة الشائعة

هل درس «القوائم الديناميكية باستخدام ArrayList» مجاني؟

نعم — نص درس «القوائم الديناميكية باستخدام ArrayList» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Zig Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Zig Academy 4 دروس في المجموع.

ماذا ستتعلم في «القوائم الديناميكية باستخدام ArrayList»؟

كبّروا مخزناً مؤقتاً مدعوماً بمخصّص تتمرن على Zig Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Zig Academy؟

لا تُشترط خبرة سابقة. Zig Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «القوائم الديناميكية باستخدام ArrayList»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Zig Academy هذا؟

نعم. كل درس في Zig Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا لا يحتوي Zig على تخصيصات خفية
  2. واجهة المخصّص
  3. ‏alloc وfree وcreate وdestroy
  4. القوائم الديناميكية باستخدام ArrayList
← العودة إلى Zig Academy