کالکشنها
کالکشنها در سیشارپ مجموعهای از ساختارهای داده هستند که امکان ذخیره، مدیریت و پردازش گروهی از اشیاء را فراهم میکنند. برخلاف آرایههای ثابت، کالکشنها اندازهی پویا دارند و عملیاتهایی مانند جستجو، مرتبسازی و پیمایش را به شکلی بهینه و ساده فراهم میکنند. استفاده از کالکشنها در توسعه نرمافزار اهمیت دارد زیرا به اجرای الگوریتمها، مدیریت دادهها و رعایت اصول برنامهنویسی شیءگرا مانند کپسولهسازی، وراثت و چندریختی کمک میکند.
در سیشارپ، انواع اصلی کالکشنها شامل List، Dictionary، HashSet، Queue و Stack هستند. List برای ذخیرهی دادههای مرتب و پویا مناسب است؛ Dictionary برای نگهداری جفتهای کلید-مقدار و دسترسی سریع؛ HashSet برای ذخیره عناصر یکتا؛ Queue برای ساختار FIFO (اولین وارد، اولین خارج) و Stack برای ساختار LIFO (آخرین وارد، اولین خارج) کاربرد دارند. انتخاب درست نوع کالکشن میتواند به بهینهسازی عملکرد، جلوگیری از خطا و افزایش مقیاسپذیری برنامه کمک کند.
در این آموزش، نحوه افزودن، حذف، جستجو و پیمایش عناصر کالکشنها، مدیریت خطاها، بهینهسازی عملکرد و ادغام در معماری سیستم به صورت عملی آموزش داده میشود. پس از مطالعه این آموزش، توسعهدهندگان قادر خواهند بود از کالکشنها به شکلی استراتژیک در برنامههای سیشارپ خود برای ساخت اپلیکیشنهای مقیاسپذیر، قابل نگهداری و با عملکرد بالا استفاده کنند.
مثال پایه
textusing System;
using System.Collections.Generic;
namespace CollectionsExample
{
class Program
{
static void Main(string\[] args)
{
// ایجاد یک لیست پویا از اعداد
List<int> numbers = new List<int>();
// افزودن عناصر به لیست
numbers.Add(10);
numbers.Add(20);
numbers.Add(30);
// نمایش عناصر لیست
Console.WriteLine("لیست اعداد:");
foreach (int num in numbers)
{
Console.WriteLine(num);
}
// بررسی وجود یک عنصر
if (numbers.Contains(20))
{
Console.WriteLine("عدد 20 در لیست موجود است.");
}
// حذف یک عنصر
numbers.Remove(10);
Console.WriteLine("پس از حذف 10:");
numbers.ForEach(n => Console.WriteLine(n));
}
}
}
در این مثال، از List
استفاده از جنریکها نوع ایمنی و عملکرد بهتر را تضمین میکند و Lambda expression برای نمایش عناصر لیست به کار رفته است. در پروژههای واقعی، List برای ذخیره دادههای کاربران، وظایف یا دادههای عددی کاربرد دارد و میتواند با سایر الگوریتمها و ساختارها یکپارچه شود.
مثال کاربردی
textusing System;
using System.Collections.Generic;
namespace AdvancedCollections
{
class Product
{
public int Id { get; set; }
public string Name { get; set; }
public double Price { get; set; }
}
class Program
{
static void Main(string[] args)
{
// ایجاد یک Dictionary برای محصولات
Dictionary<int, Product> products = new Dictionary<int, Product>();
// افزودن محصولات
products.Add(1, new Product { Id = 1, Name = "Laptop", Price = 4500 });
products.Add(2, new Product { Id = 2, Name = "Mouse", Price = 150 });
products.Add(3, new Product { Id = 3, Name = "Keyboard", Price = 300 });
// نمایش محصولات با قیمت بالای 200
Console.WriteLine("محصولات با قیمت بالای 200:");
foreach (var product in products.Values)
{
if (product.Price > 200)
Console.WriteLine($"{product.Name} - قیمت: {product.Price}");
}
// مدیریت خطای افزودن کلید تکراری
try
{
products.Add(2, new Product { Id = 2, Name = "Monitor", Price = 1200 });
}
catch (ArgumentException ex)
{
Console.WriteLine("خطا: کلید تکراری. " + ex.Message);
}
}
}
}
در این مثال، Dictionary\
بهترین شیوهها شامل انتخاب نوع مناسب کالکشن، استفاده از foreach یا LINQ، مدیریت درست استثناها و حداقل کردن بار حافظه است. اشتباهات رایج شامل استفاده نامناسب از List برای جستجوی سنگین، نادیده گرفتن کلیدهای تکراری در Dictionary و کپیهای غیرضروری در کالکشنهای بزرگ هستند. ابزارهای Debugging و بررسی وضعیت کالکشنها به عیبیابی کمک میکنند. بهینهسازی عملکرد با انتخاب نوع مناسب و کاهش عملیات غیرضروری حاصل میشود و امنیت با اعتبارسنجی ورودی تضمین میگردد.
📊 جدول مرجع
سیشارپ Element/Concept | Description | Usage Example |
---|---|---|
List<T> | ذخیره عناصر مرتب و پویا | List<int> numbers = new List<int>(); |
Dictionary\<TKey, TValue> | دسترسی سریع به جفت کلید-مقدار | Dictionary\<int, string> dict = new Dictionary\<int, string>(); |
HashSet<T> | ذخیره عناصر یکتا | HashSet<string> uniqueNames = new HashSet<string>(); |
Queue<T> | ساختار FIFO | Queue<int> queue = new Queue<int>(); |
Stack<T> | ساختار LIFO | Stack<int> stack = new Stack<int>(); |
یادگیری کالکشنها در سیشارپ باعث درک بهتر ساختار دادهها، عملکرد و اصول برنامهنویسی شیءگرا میشود. انتخاب و استفاده صحیح از کالکشنها امکان توسعه برنامههای مقیاسپذیر و قابل نگهداری را فراهم میکند. موضوعات بعدی شامل LINQ، Concurrent Collections و Design Patterns است. در پروژههای واقعی میتوان از کالکشنها برای سیستمهای موجودی، کشینگ و پایپلاین داده استفاده کرد. منابع رسمی و انجمنهای برنامهنویسی به یادگیری و بهبود مهارتهای عملی کمک میکنند.
🧠 دانش خود را بیازمایید
آزمون دانش شما
درک خود از این موضوع را با سوالات کاربردی بسنجید.
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود