
آموزش کلاس های کالکشنی در سی شارپ
آموزش کلاس های کالکشنی در سی شارپ یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی آموزش اصول کار با کالکشن ها در سی شارپ است که با نام اصلی C Sharp Collections Fundamentals شرکت Pluralsight منتشر شده است.
Collection ها چه هستند؟
به منظور استفاده و مدیریت از گروهای از اشیا در برنامه های دات نت می توان آرایه ای از اشیا و یا Collection ی از اشیا را ساخت. کاربرد آرایه ها بیشتر در کار کردن با تعداد مشخصی از اشیا می باشد که همگی از یک نوع یکسان هستند. به عبارت دیگر آرایه ها در دات نت Strongly Typed هستند.
از طرف دیگر، Collection ها در کار کردن با مجموعه هایی که تعداد اعضای آنها به صورت پویا کم و یا زیاد می شود استفاده می گردند. علاوه بر این، در بعضی از Collection ها، می توان به هر عنصری کلیدی اختصاص داد که با استفاده از آن کلید، عنصر مورد نظر را سریعاً بازیابی کرد. باید بگوییم که یک Collection در اصل یک کلاس می باشد. بنابراین، برای استفاده از آنها باید یک شی از کلاس مورد نظر را ساخت.

اگر مجموعه ای که قصد کار کردن با آن را دارید شامل عناصری می شود که همگی از یک جنس هستند می توانید از کلاس هایی که در System.Collections.Generic می باشند استفاده کنید. Collection هایی که جنریک هستند به ما امکان اضافه کردن اشیا غیرهمجنس را به مجموعه نمی دهند. علاوه بر این، در زمان بازیابی عنصری از این مجموعه ها نیازی به تشخیص نوع آن عنصر نیست.
ضمناً توصیه می کنیم که از آموزش مباحث پیشرفته کالکشن ها Collection ها در سی شارپ و آموزش کلاس های کالکشنی همروند Concurrent Collection ها در سی شارپ نیز دیدن کنید.
تفاوت Array و List در سی شارپ چیست؟
در C#، آرایهها و Listها دو روش رایج برای نگهداری مجموعهای از دادهها هستند، اما از نظر نحوه مدیریت اندازه و امکانات عملیاتی تفاوت دارند. آرایه معمولاً اندازه مشخصی دارد که هنگام ایجاد آن تعیین میشود؛ در مقابل، List امکان اضافه کردن و حذف عناصر را با مدیریت خودکار اندازه مجموعه فراهم میکند. برای مثال، اگر تعداد عناصر از ابتدا مشخص باشد، آرایه میتواند انتخاب مناسبی باشد، اما برای مجموعهای که در طول اجرای برنامه تغییر میکند، List معمولاً انعطاف بیشتری دارد.
انتخاب میان Array و List به نیاز برنامه و نوع عملیات مورد انتظار بستگی دارد. هر دو ساختار میتوانند دادههای دارای نوع مشخص را نگهداری کنند و از طریق اندیس به عناصر دسترسی بدهند. با این حال، عملیاتهایی مانند درج یا حذف عنصر در موقعیتهای مختلف، رفتار و هزینه متفاوتی دارند. شناخت این تفاوتها به برنامهنویس کمک میکند هنگام طراحی ساختار داده، بهجای استفاده یکسان از همه مجموعهها، گزینهای را انتخاب کند که با الگوی دسترسی و تغییر دادهها سازگارتر است.
Dictionary و HashSet در C# چه کاربردی دارند؟
Dictionary در سی شارپ برای نگهداری دادهها به شکل جفتهای کلید و مقدار استفاده میشود. این ساختار زمانی مفید است که بخواهید یک مقدار را با استفاده از کلیدی مشخص پیدا کنید؛ برای مثال، میتوانید اطلاعات کاربران را بر اساس شناسه آنها نگهداری کنید. در مقابل، HashSet برای ذخیره مجموعهای از مقادیر یکتا طراحی شده است و از اضافه شدن عناصر تکراری جلوگیری میکند. این ویژگی برای زمانی مناسب است که هدف، بررسی وجود یک مقدار یا نگهداری مقادیر بدون تکرار باشد.
هر دو ساختار از سازوکارهای مبتنی بر Hashing برای انجام بسیاری از عملیاتهای جستوجو و بررسی عضویت استفاده میکنند، اما هدف و نحوه استفاده از آنها یکسان نیست. Dictionary زمانی کاربرد دارد که ارتباط میان کلید و مقدار اهمیت داشته باشد، در حالی که HashSet بیشتر برای مدیریت مجموعهای از عناصر یکتا به کار میرود. آشنایی با این تفاوتها به شما کمک میکند ساختار دادهای را انتخاب کنید که با نیاز برنامه هماهنگ باشد و از پیادهسازیهای غیرضروری برای جستوجو یا حذف تکرارها جلوگیری کند.
Stack و Queue در سی شارپ چگونه کار میکنند؟
Stack و Queue دو ساختار داده مهم در C# هستند که عناصر را بر اساس ترتیب مشخصی مدیریت میکنند. Stack از الگوی Last In, First Out یا LIFO پیروی میکند؛ یعنی آخرین عنصری که وارد میشود، نخستین عنصری است که خارج میشود. این ساختار برای سناریوهایی مانند مدیریت عملیات بازگشت یا پردازش دادههایی که ترتیب معکوس اهمیت دارد، کاربرد دارد. در مقابل، Queue بر اساس الگوی First In, First Out یا FIFO عمل میکند و عناصر را به ترتیب ورود پردازش میکند.
برای مثال، میتوان از Queue برای نگهداری درخواستهایی استفاده کرد که باید به ترتیب دریافت پردازش شوند، یا از Stack برای نگهداری موقت عملیات در یک فرایند محاسباتی استفاده کرد. انتخاب میان این دو ساختار باید بر اساس ترتیب موردنیاز برای افزودن و برداشتن عناصر انجام شود. درک رفتار آنها همچنین به شما کمک میکند هنگام کار با الگوریتمها، پردازش درخواستها یا مدیریت عملیات داخلی برنامه، ساختار داده مناسبتری را انتخاب کنید.
Enumerator و رابطهای مجموعهها در C# چه نقشی دارند؟
در سی شارپ، رابطهایی مانند IEnumerable و ICollection و IList الگوهای استانداردی برای کار با مجموعههای داده فراهم میکنند. این رابطها به توسعهدهندگان اجازه میدهند بهجای وابسته شدن به یک پیادهسازی مشخص، با مجموعهها از طریق قراردادهای مشترک کار کنند. برای مثال، متدی که فقط به پیمایش عناصر نیاز دارد، میتواند پارامتری از نوع IEnumerable دریافت کند و بدون اطلاع از اینکه دادهها در Array یا List ذخیره شدهاند، روی آنها پیمایش انجام دهد.
Enumerator نیز سازوکاری برای حرکت مرحلهبهمرحله میان عناصر یک مجموعه فراهم میکند. در بسیاری از موارد، حلقه foreach از همین قابلیت برای دسترسی به عناصر استفاده میکند و جزئیات پیمایش را از کد اصلی پنهان نگه میدارد. شناخت رابطهای مجموعهها و نحوه کار Enumerator به شما کمک میکند کدهای انعطافپذیرتر و قابلاستفاده مجدد بنویسید. این مفاهیم همچنین در درک ساختار مجموعههای استاندارد دات نت و طراحی متدهایی که با انواع مختلف داده کار میکنند، اهمیت دارند.
سرفصل مطالب آموزش ویدئویی Collection ها در سی شارپ
فصل اول: معرفی Collection ها در سی شارپ
- مقدمه
- کالکشن چیست؟
- لیست ها
- دیکشنری ها
- Set ها
- عملیات مربوط به کالکشن ها
- تاریخچه ای از کالکشن های دات نت
- کالکشن ها در دات نت امروز
- جمع بندی
فصل دوم: درون آرایه ها
- مقدمه
- آرایه چیست؟
- استفاده مقدماتی از آرایه ها در سی شارپ
- مکانیزم پشت پرده آرایه ها
- چرا پیدا کردن یک عنصر در آرایه سریع است؟
- چرا سایز آرایه قابل تغییر نیست؟
- مقداردهی اولیه به آرایه ها
- املای سی شارپ برای تعریف آرایه
- پیمایش آرایه ها با حلقه های for و foreach
- خاصیت فقط خواندنی بودن foreach
- جایگزین کردن و تغییر عناصر
- جمع بندی
فصل سوم: نوع داده ای Array
- مقدمه
- Array به عنوان یک Reference Type
- ذخیره کردن تایپ های مشتق شده در Array
- کلاس Array چیست؟
- Array چه کار می تواند کند؟
- کپی کردن Array ها
- معکوس کردن Array
- مرتب سازی Array با IComparer جنریک
- پیدا کردن عناصر با متدهای IndexOf، FindAll و غیره
- جست و جوی Binary
- متدهای Array در کار با LINQ
- جمع بندی
فصل جهارم: اینترفیس های کاربردی در کالکشن ها
- مقدمه
- درخت وراثت در اینترفیس ها
- اینترفیس های جنریک
- اینترفیس های فقط خواندنی
- اینترفیس های قدیمی غیرجنریک
- کالکشن IEnumerable جنریک
- کالکشن ICollection جنریک
- پروپرتی IsReadOnly از کالکشن جنریک ICollection
- پیاده سازی Explicit یک اینترفیس
- اینترفیس IReadOnlyCollection جنریک
- اینترفیس IList جنریک
- اینترفیس IReadOnlyList جنریک
- اینترفیس IDictionary جنریک
- اینترفیس IReadOnlyDictionary جنریک
- اینترفیس ISet جنریک
- جمع بندی
فصل پنجم: لیست ها
- مقدمه
- معرفی List جنریک
- پشت پرده ی List جنریک
- قابلیت های List جنریک
- متد AsReadOnly و ReadOnlyCollection جنریک
- Collection جنریک
- ObservableCollection جنریک
- جمع بندی
فصل ششم: لیست های پیوندی، استک و صف
- مقدمه معرفی لیست های پیوندی کلاس های LinkedList و LinkedListNode جنریک استک جنریک صف جنریک مقدمه
فصل هفتم: دیکشنری ها
- مقدمه
- معرفی دیکشنری جنریک
- پیمایش عناصر دیکشنری
- جست و جوی عناصر دیکشنری
- تغییر دادن دیکشنری
- استفاده از IEqualityComparer برای مقایسه کلید ها
- پشت پرده ی Dictionary جنریک
- متد GetHashCode و ماهیت Hash Code
- نوشتن یک EqualityComparer سفارشی
- ReadOnlyDictionary جنریک
- SortedList جنریک
- پیاده سازی یک IComparer سفارشی
- SortedDictionary جنریک
- معرفی KeyedCollection جنریک
- استفاده از KeyedCollection جنریک به عنوان یک لیست
- جمع بندی
فصل هشتم: Set ها
- مقدمه
- معرفی HashSet جنریک
- HashSet جنریک و مفهوم یکتایی
- HashSet جنریک و Comparer ها
- متد IntersectsWith و مفهوم اشتراک
- مفاهیم Union، Difference و Symmetric Difference
- مقایسه ی عناصر و متد SetEquals
- مقایسه و زیر مجموعه در Set ها
- SortedSet جنریک
- جمع بندی
فصل نهم: Enumerator ها
- مقدمه
- Enumerator ها و اینترفیس IEnumerator جنریک
- ماهیت حلقه ی foreach
- چرا کالکشن ها به خودی خود قابل پیمایش نیستند؟
- تغییر عناصر در زمان پیمایش
- پیاده سازی Enumerator سفارشی
- مفهوم Enumerable Covariance
- جمع بندی
فصل دهم: آرایه های چندبعدی و دندانه ای
- مقدمه
- آرایه های Multidimensional
- مفهوم Length و Rank
- مفهوم Bound و متدهای GetLowerBound و GetUpperBound
- آرایه های Jagged
- مقایسه های آرایه های Multidimensional و Jagged
- جمع بندی







