المسارات
/
Perl
Perl
/
المنهج
/
المصفوفات والقوائم
ال

المصفوفات والقوائم في Perl

1 تمرين

نبذة عن المصفوفات والقوائم

تحتوي المصفوفات والقوائم على مجموعة مرتّبة من القيم المفردة. وباستثناء استخدام المراجع (وسيُغطّى ذلك في مفهوم منفصل)، يعني هذا أن المصفوفات والقوائم مسطّحة دائمًا، أي أنها لا يمكن أن تحتوي على مصفوفات أو قوائم أخرى.

في معظم الحالات، تُحاط القوائم بالأقواس الهلالية () وتُفصل عناصرها بفواصل ,.

عادةً ما يُملأ متغيّر المصفوفة بإسناد قائمة إليه، مثل my @names = ('Alice', 'Bob', 'Charlie');.

يمكن الوصول إلى عناصر المصفوفة أو القائمة بتحديد فهارسها عبر الرمز السفلي، مثل ('Alice', 'Bob', 'Charlie')[1] # 'Bob'.

تبدأ الفهارس في Perl من 0. تُحسب الفهارس السالبة من نهاية المصفوفة أو القائمة، مثل ('Alice', 'Bob', 'Charlie')[-1] # 'Charlie'.

الدوال

هناك دوال كثيرة مُنفَّذة للتعامل مع المصفوفات والقوائم، ومن أكثرها فائدة grep للحصول على قائمة جديدة من العناصر المصفّاة التي تحقّق شرطًا، وmap لتحويل العناصر إلى قائمة جديدة من القيم، وsort للحصول على قائمة جديدة من العناصر المُعاد ترتيبها.

تشمل دوال التعامل مع المصفوفات push لإضافة عناصر إلى النهاية، وpop لإزالة العنصر الأخير، وshift لإزالة العنصر الأول، وunshift لإضافة عناصر إلى البداية، وsplice لإجراء تعديلات أكثر تعقيدًا.

كما ستصادف كثيرًا المرور على المصفوفات والقوائم باستخدام عبارة for(each).

تباين السيجيل

عند الوصول إلى عناصر مصفوفة، فإن السيجيل المستخدم هو ما يحدّد النتيجة. والرمز السفلي [] في نهاية اسم المتغيّر هو ما يخبر Perl بأنك تصل إلى مصفوفة بهذا الاسم.

my @names = ('Alice', 'Bob', 'Charlie');

$names[0]; # 'Alice'      <- A scalar
@names[0]; # ('Alice')    <- A slice (with only one index, this probably isn't what you want. There will be a warning.)
%names[0]; # (0, 'Alice') <- A key/index + value slice

$names[1, 2]; # 'Charlie'                <- A scalar (via unsupported syntax for an ancient feature. Probably not what you want. There will be a warning.)
@names[1, 2]; # ('Bob', 'Charlie')       <- A slice
%names[1, 2]; # (1, 'Bob', 2, 'Charlie') <- A key/index + value slice

ورغم أن ذلك مسموح، يُنصح بعدم إعطاء أنواع متغيّرات مختلفة الاسم نفسه، من أجل سهولة القراءة.

المصفوفات مقابل القوائم

تتشابه المصفوفات والقوائم في جوانب كثيرة، ويمكن استخدام إحداهما مكان الأخرى في مواضع عديدة، لكنهما ليستا الشيء نفسه. القائمة مجموعة ثابتة وغير قابلة للتغيير من القيم المفردة. أما المصفوفة فهي مجموعة متغيّرة من القيم المفردة يمكن تغيير محتواها وحجم المصفوفة نفسها.

ولسلوكهما اختلاف في بعض السياقات. المصفوفة المستخدمة في سياق القيمة المفردة ستُعطيك حجم المصفوفة. أما القائمة المستخدمة في سياق القيمة المفردة فستُعطيك العنصر الأخير في القائمة، وربما بعض التحذيرات لأن بقية محتواها يُستخدم في سياق فارغ.

my @names = ('Alice', 'Bob', 'Charlie');

scalar @names; # 3
scalar ('Alice', 'Bob', 'Charlie'); # 'Charlie' (and some warnings).

اقرأ المزيد في الأسئلة الشائعة التالية: ما الفرق بين القائمة والمصفوفة؟

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة

تعلّم المصفوفات والقوائم

التدريب مقفل

افتح 10 تمارين إضافية لممارسة المصفوفات والقوائم