ریبوار حسین پوری
ریبوار حسین پوری
خواندن ۲ دقیقه·۵ سال پیش

مروری بر کالکشن ها در سی شارپ

سلسله مراتب فضای نام کالکشن ها در سی شارپ
سلسله مراتب فضای نام کالکشن ها در سی شارپ


قسمت اول: استفاده از List

برای اکثر پروژه های نرم افزاری لازمه که گروهی از آبجکت های مرتبط با هم بسازیم و یا آنها را مدیریت کنیم، دو راهکار پیش رو داریم:

  • استفاده از آرایه ها
  • بکارگیری کالکشن ها

آرایه ها انتخاب خوبی برای ساختن و کار با تعداد ثابتی از آبجکت هاست اما در روی دیگر قضیه کالکشن ها هستند که در کار با گروهی از آبجکت ها بسیار منعطفتر از آرایه ها هستند ، یکی از بزرگترین حسن آنها هنگامی که به تغییرات در پروژه نیاز است، تغییر سایز داینامیکی آنهاست. برخی از کالکشن ها به لطف Key Value بودن کافیه از کلید برای واکشی سریع داده آن استفاده نمود(پرفرمنس بالاتر).

یک کالکشن در واقع کلاسی ست که برای استفاده از آن بایستی یک instance از آن ساخته شود

اگر کالکشن تنها شامل عناصر یک نوع داده باشد میتوان از یکی از کلاسهای موجود در فضای نام System.Collections.Generic استفاده کرد، با توجه به Type Safetyبودن جنریک ها ، تضمین میکند تنها داده های مربوط به آن مورد استفاده قرار گیرند، موقع واکشی عناصر جنریک لازم نیست نوع آن ذکر شود و عملیات تبدیل نوع صورت نمیگیرد(در حالت عادی نیاز به عمل Boxing و UnBoxing میباشد که این پروسه در جنریکها حذف شده و لازم به اینکار نیست ، پس میتوان گفت جنریک ها از لحاظ پرفرمنسی انتخاب خوبی برای کار با داده ها هستند)

استفاده از یک کالکشن ساده:

مثال زیر از جنریک کلاس List<T> استفاده کرده که به ما امکان کار کردن با لیستی از اشیا Strongly Type را میدهد و همانطور که پیداست برای پیمایش آیتم های درون آن از یک حلقه foreach استفاده شده

ساخت یک لیست، افزودن آیتم جدید و پیمایش اعضای آن توسط foreach
ساخت یک لیست، افزودن آیتم جدید و پیمایش اعضای آن توسط foreach


بجای استفاده از حلقه foreach میتوان پیمایش را با یک حلقه for انجام داد ، که برای دسترسی به ایتم های درون لیست از موقعیت هر آیتم استفاده میکنیم و مانند دیگر موارد سی شارپ آیتم اول با شماره 0 شروع میشود .

ساخت یک لیست، افزودن آیتم جدید و پیمایش اعضای آن توسط for
ساخت یک لیست، افزودن آیتم جدید و پیمایش اعضای آن توسط for


جهت حذف یک آیتم از دو تابع پرکاربرد Remove(کافیه آیتم رو به آن پاس دهیم) و RemoveAt(بعنوان ورودی index اون آیتمی که میخوایم حذفش کنیم رو میگیره)

حذف اعداد فرد از لیست
حذف اعداد فرد از لیست


تا حالا با انواعی که در سی شارپ موجود بودند مثالها رو بررسی کردیم ، میتوان انواع ساخته شده توسط خودمان(برای مثال کلاس) را هم بعنوان عناصر لیست در نظر بگیریم، مثال پایین لیستی از کلاس دانشجویان را نشان میدهد

لیستی از دانشجویان
لیستی از دانشجویان


نکته:
هنگام ساخت لیست اگر ظرفیت آنرا مشخص نکرده باشیم بصورت پیش فرض 4 آیتم را در نظر میگیرد و به محض اینکه آیتم پنجم را به لیست اضافه کردیم این مقدار به 8 و همینطور بصورت تصاعدی افزایش میابد و در پروژه های بزرگ میتواند ما را با کمبود حافظه مواجه کند، پس بهتر است در صورت دانستن آن حتما ظرفیت قید شود(یک کانستراکتور دارد که ظرفیت را میگیرد و هم یک پراپرتی برای مشخص کردن ظرفیت یا Capacity آن) ، در غیر اینصورت میتوان با دستور TrimExcess حافظه بلا استفاده را آزاد کرد




سی شارپدات نتکالکشنلیستlist
برنامه نویس ASP.NET | عکاس منظره
شاید از این پست‌ها خوشتان بیاید