مسیر
/
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

هرچند این کار مجاز است، برای خوانایی بهتر توصیه می‌شود که انواع مختلف متغیر اسم یکسان نداشته باشند.

آرایه در برابر لیست

آرایه‌ها و لیست‌ها شباهت‌های زیادی دارند و در بسیاری از جاها می‌توان آن‌ها را به جای هم به کار برد، اما یکی نیستند. لیست یک مجموعه‌ی ثابت و تغییرناپذیر از اسکالرها است. آرایه یک مجموعه‌ی متغیر از اسکالرها است که محتوا و اندازه‌ی خود آرایه می‌تواند تغییر کند.

رفتارشان در برخی زمینه‌ها فرق می‌کند. یک آرایه که در زمینه‌ی اسکالر به کار برود، اندازه‌ی آرایه را به شما می‌دهد. یک لیست که در زمینه‌ی اسکالر به کار برود، آخرین عنصر لیست را به شما می‌دهد و احتمالاً چند هشدار درباره‌ی اینکه بقیه‌ی محتوایش در زمینه‌ی void استفاده شده است.

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

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

بیشتر بخوانید در پرسش‌های متداول زیر: تفاوت لیست و آرایه چیست؟

ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

آرایه و فهرست را یاد بگیرید

تمرین کردن قفل شده است

برای تمرین آرایه و فهرست قفل 10 تمرین دیگر را باز کنید