در حال بارگذاری...

کالکشن‌ها

کالکشن‌ها در سی‌شارپ مجموعه‌ای از ساختارهای داده هستند که امکان ذخیره، مدیریت و پردازش گروهی از اشیاء را فراهم می‌کنند. برخلاف آرایه‌های ثابت، کالکشن‌ها اندازه‌ی پویا دارند و عملیات‌هایی مانند جستجو، مرتب‌سازی و پیمایش را به شکلی بهینه و ساده فراهم می‌کنند. استفاده از کالکشن‌ها در توسعه نرم‌افزار اهمیت دارد زیرا به اجرای الگوریتم‌ها، مدیریت داده‌ها و رعایت اصول برنامه‌نویسی شیء‌گرا مانند کپسوله‌سازی، وراثت و چندریختی کمک می‌کند.
در سی‌شارپ، انواع اصلی کالکشن‌ها شامل List، Dictionary، HashSet، Queue و Stack هستند. List برای ذخیره‌ی داده‌های مرتب و پویا مناسب است؛ Dictionary برای نگهداری جفت‌های کلید-مقدار و دسترسی سریع؛ HashSet برای ذخیره عناصر یکتا؛ Queue برای ساختار FIFO (اولین وارد، اولین خارج) و Stack برای ساختار LIFO (آخرین وارد، اولین خارج) کاربرد دارند. انتخاب درست نوع کالکشن می‌تواند به بهینه‌سازی عملکرد، جلوگیری از خطا و افزایش مقیاس‌پذیری برنامه کمک کند.
در این آموزش، نحوه افزودن، حذف، جستجو و پیمایش عناصر کالکشن‌ها، مدیریت خطاها، بهینه‌سازی عملکرد و ادغام در معماری سیستم به صورت عملی آموزش داده می‌شود. پس از مطالعه این آموزش، توسعه‌دهندگان قادر خواهند بود از کالکشن‌ها به شکلی استراتژیک در برنامه‌های سی‌شارپ خود برای ساخت اپلیکیشن‌های مقیاس‌پذیر، قابل نگهداری و با عملکرد بالا استفاده کنند.

مثال پایه

text
TEXT Code
using 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 برای ایجاد یک کالکشن پویا استفاده شده است. متد Add() برای افزودن عناصر، foreach برای پیمایش امن و کارآمد، Contains() برای بررسی وجود عنصر و Remove() برای حذف عنصر استفاده شده‌اند. این نمونه، پایه‌ای برای درک کالکشن‌ها و آماده‌سازی برای استفاده از کالکشن‌های پیشرفته‌تر مانند HashSet و Dictionary فراهم می‌کند.
استفاده از جنریک‌ها نوع ایمنی و عملکرد بهتر را تضمین می‌کند و Lambda expression برای نمایش عناصر لیست به کار رفته است. در پروژه‌های واقعی، List برای ذخیره داده‌های کاربران، وظایف یا داده‌های عددی کاربرد دارد و می‌تواند با سایر الگوریتم‌ها و ساختارها یکپارچه شود.

مثال کاربردی

text
TEXT Code
using 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\ برای مدیریت کالکشن‌های شیء‌گرا استفاده شده است. دسترسی سریع O(1) از طریق کلید امکان‌پذیر است و foreach روی products.Values از اصول کپسوله‌سازی پشتیبانی می‌کند. ساختار try-catch برای مدیریت خطای کلید تکراری استفاده شده است. این نمونه نشان می‌دهد که انتخاب درست نوع کالکشن چگونه می‌تواند عملکرد و یکپارچگی داده‌ها را تضمین کند و در سناریوهای واقعی مانند سیستم‌های موجودی یا تحلیل داده‌ها کاربرد دارد.

بهترین شیوه‌ها شامل انتخاب نوع مناسب کالکشن، استفاده از 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 است. در پروژه‌های واقعی می‌توان از کالکشن‌ها برای سیستم‌های موجودی، کشینگ و پایپلاین داده استفاده کرد. منابع رسمی و انجمن‌های برنامه‌نویسی به یادگیری و بهبود مهارت‌های عملی کمک می‌کنند.

🧠 دانش خود را بیازمایید

آماده شروع

آزمون دانش شما

درک خود از این موضوع را با سوالات کاربردی بسنجید.

4
سوالات
🎯
70%
برای قبولی
♾️
زمان
🔄
تلاش‌ها

📝 دستورالعمل‌ها

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