সি শার্পে (C#) অ্যারে এবং কালেকশন ডেটার একটি গ্রুপ একত্রে সংরক্ষণ করতে ব্যবহৃত হয়। অ্যারে হলো একটি নির্দিষ্ট আকারের ডেটা সংরক্ষণ করার কাঠামো, আর কালেকশন হলো ডাইনামিক আকারের ডেটা সংরক্ষণ করার কাঠামো, যেখানে প্রয়োজন অনুসারে নতুন ডেটা যোগ বা সরানো যায়। কালেকশন সাধারণত বেশি ফ্লেক্সিবল এবং একাধিক ডেটা টাইপ সমর্থন করে।
অ্যারে (Array)
অ্যারে হলো একই ডেটা টাইপের একাধিক আইটেম সংরক্ষণ করার জন্য ব্যবহৃত একটি ফিক্সড-সাইজের ডেটা স্ট্রাকচার। একবার অ্যারের আকার নির্ধারণ করা হলে, তা পরিবর্তন করা সম্ভব হয় না।
অ্যারের বৈশিষ্ট্য
- একই ডেটা টাইপের একাধিক আইটেম সংরক্ষণ করা যায়।
- অ্যারের ইনডেক্স 0 থেকে শুরু হয়।
- একবার আকার নির্ধারণ করা হলে তা পরিবর্তনযোগ্য নয়।
অ্যারের গঠন এবং উদাহরণ
int[] numbers = new int[5]; // আকার নির্ধারণ করে একটি ইন্টিজার অ্যারে তৈরি করা
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;
অথবা, সরাসরি অ্যারের মান ইনিশিয়ালাইজ করা যায়:
csharp
Copy code
int[] numbers = { 10, 20, 30, 40, 50 };
অ্যারে ব্যবহার উদাহরণ প্রোগ্রাম
class Program
{
static void Main(string[] args)
{
int[] numbers = { 10, 20, 30, 40, 50 };
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine("Element at index " + i + ": " + numbers[i]);
}
}
}
আউটপুট:
Element at index 0: 10
Element at index 1: 20
Element at index 2: 30
Element at index 3: 40
Element at index 4: 50
কালেকশন (Collection)
কালেকশন হলো ডাইনামিক ডেটা স্ট্রাকচার, যা অ্যারের তুলনায় আরো বেশি ফ্লেক্সিবল এবং ম্যানেজমেন্ট সহজ। C# এ বিভিন্ন ধরনের কালেকশন রয়েছে, যেমন List, Dictionary, Queue, এবং Stack। System.Collections এবং System.Collections.Generic লাইব্রেরিতে কালেকশন ক্লাসগুলি পাওয়া যায়।
সাধারণ কালেকশন
- List: ডাইনামিক আকারের একটি লিস্ট, যেখানে ডেটা যোগ এবং সরানো যায়।
- Dictionary: কী-ভ্যালু পেয়ার আকারে ডেটা সংরক্ষণ করতে ব্যবহৃত।
- Queue: FIFO (First-In-First-Out) এর ভিত্তিতে কাজ করে।
- Stack: LIFO (Last-In-First-Out) এর ভিত্তিতে কাজ করে।
১. List ব্যবহার
List<T> একটি জেনেরিক কালেকশন যা ডাইনামিক আকারের। এটি অ্যারের তুলনায় বেশি ফ্লেক্সিবল এবং Add, Remove, Insert ইত্যাদি মেথড সমর্থন করে।
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
List<int> numbers = new List<int> { 10, 20, 30, 40, 50 };
numbers.Add(60); // Add new element
numbers.Remove(20); // Remove element
foreach (int number in numbers)
{
Console.WriteLine("Number: " + number);
}
}
}
আউটপুট:
Number: 10
Number: 30
Number: 40
Number: 50
Number: 60
২. Dictionary ব্যবহার
Dictionary<TKey, TValue> কী-ভ্যালু পেয়ার আকারে ডেটা সংরক্ষণ করে, যেখানে TKey হলো কী এবং TValue হলো ভ্যালু।
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
Dictionary<int, string> students = new Dictionary<int, string>();
students.Add(101, "Alice");
students.Add(102, "Bob");
students.Add(103, "Charlie");
foreach (KeyValuePair<int, string> student in students)
{
Console.WriteLine("ID: " + student.Key + ", Name: " + student.Value);
}
}
}
আউটপুট:
ID: 101, Name: Alice
ID: 102, Name: Bob
ID: 103, Name: Charlie
৩. Queue ব্যবহার
Queue<T> FIFO (First-In-First-Out) ভিত্তিক একটি কালেকশন, যেখানে প্রথমে যোগ করা ডেটা প্রথমে সরানো হয়।
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
Queue<string> queue = new Queue<string>();
queue.Enqueue("Alice");
queue.Enqueue("Bob");
queue.Enqueue("Charlie");
Console.WriteLine("Dequeue: " + queue.Dequeue()); // Output: Alice
foreach (string person in queue)
{
Console.WriteLine("Person: " + person);
}
}
}
আউটপুট:
Dequeue: Alice
Person: Bob
Person: Charlie
৪. Stack ব্যবহার
Stack<T> LIFO (Last-In-First-Out) ভিত্তিক একটি কালেকশন, যেখানে সর্বশেষে যোগ করা ডেটা প্রথমে সরানো হয়।
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
Stack<string> stack = new Stack<string>();
stack.Push("Alice");
stack.Push("Bob");
stack.Push("Charlie");
Console.WriteLine("Pop: " + stack.Pop()); // Output: Charlie
foreach (string person in stack)
{
Console.WriteLine("Person: " + person);
}
}
}
আউটপুট:
Pop: Charlie
Person: Bob
Person: Alice
অ্যারে বনাম কালেকশন
| বৈশিষ্ট্য | অ্যারে | কালেকশন |
|---|---|---|
| আকার | নির্দিষ্ট (fixed) | ডাইনামিক (dynamic) |
| ডেটা টাইপ | একক ডেটা টাইপ | একাধিক ধরনের ডেটা সংরক্ষণ করা যায় |
| মেম্বার মেথড | সীমিত | .Add(), .Remove(), .Insert(), ইত্যাদি |
| কাজের ধরন | সহজ এবং দ্রুত | বহুমুখী এবং ফ্লেক্সিবল |
সারসংক্ষেপ
সি শার্পে অ্যারে হলো একটি নির্দিষ্ট আকারের ডেটা স্ট্রাকচার যা একই ধরনের ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। কালেকশন হলো ডাইনামিক ডেটা স্ট্রাকচার যা ডেটা সংরক্ষণ এবং ম্যানেজমেন্টে আরও বেশি ফ্লেক্সিবল। কালেকশন বিভিন্ন ধরনের ডেটা সংরক্ষণ করতে পারে এবং এতে ডেটা যোগ বা সরানোর মেথডও থাকে। অ্যারে এবং কালেকশন সঠিকভাবে ব্যবহার করে ডেটা স্ট্রাকচারিং এবং ম্যানেজমেন্ট সহজ হয়।
সি শার্পে (C#) অ্যারে (Array) হলো একই ধরনের একাধিক মান সংরক্ষণ করার জন্য ব্যবহৃত ডেটা স্ট্রাকচার। অ্যারে একটি স্থির দৈর্ঘ্যের সংগ্রহ যেখানে ইনডেক্স ব্যবহার করে প্রতিটি উপাদানে অ্যাক্সেস করা যায়। সি শার্পে সাধারণত একমাত্রিক এবং বহু-মাত্রিক অ্যারে ব্যবহার করা হয়।
একমাত্রিক অ্যারে (One-dimensional Array)
একমাত্রিক অ্যারে একটি সরল লাইন আকারে উপাদান সংরক্ষণ করে। এতে প্রতিটি উপাদান একটি নির্দিষ্ট ইনডেক্সে থাকে যা শূন্য থেকে শুরু হয়।
একমাত্রিক অ্যারে ডিক্লেয়ার এবং ইনিশিয়ালাইজেশন
// একমাত্রিক অ্যারে ডিক্লেয়ারেশন
int[] numbers = new int[5]; // দৈর্ঘ্য ৫, সব উপাদান ০ দ্বারা ইনিশিয়ালাইজড
// একত্রে ডিক্লেয়ার এবং ইনিশিয়ালাইজেশন
int[] scores = { 90, 85, 88, 92, 87 };
অ্যারেতে মান অ্যাক্সেস করা
int firstScore = scores[0]; // প্রথম উপাদান
scores[1] = 95; // দ্বিতীয় উপাদানের মান পরিবর্তন
উদাহরণ: একমাত্রিক অ্যারে ব্যবহার
using System;
namespace OneDimensionalArrayExample
{
class Program
{
static void Main(string[] args)
{
int[] numbers = { 10, 20, 30, 40, 50 };
// অ্যারের প্রতিটি উপাদান প্রদর্শন
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine("Element at index " + i + ": " + numbers[i]);
}
}
}
}
আউটপুট:
Element at index 0: 10
Element at index 1: 20
Element at index 2: 30
Element at index 3: 40
Element at index 4: 50
বহু-মাত্রিক অ্যারে (Multi-dimensional Array)
বহু-মাত্রিক অ্যারে একাধিক মাত্রায় ডেটা সংরক্ষণ করতে সক্ষম। সাধারণত ২-মাত্রিক (যেমন, rows x columns), ৩-মাত্রিক বা আরও বেশি মাত্রার অ্যারে ব্যবহার করা হয়।
দ্বিমাত্রিক অ্যারে (Two-dimensional Array)
২-মাত্রিক অ্যারে টেবিল বা ম্যাট্রিক্স আকারে ডেটা সংরক্ষণ করতে ব্যবহৃত হয়।
দ্বিমাত্রিক অ্যারে ডিক্লেয়ার এবং ইনিশিয়ালাইজেশন
// ২-মাত্রিক অ্যারে ডিক্লেয়ারেশন
int[,] matrix = new int[3, 2]; // 3x2 ম্যাট্রিক্স, ৩টি সারি এবং ২টি কলাম
// ডিক্লেয়ার এবং ইনিশিয়ালাইজেশন একসাথে
int[,] grid = {
{ 1, 2 },
{ 3, 4 },
{ 5, 6 }
};
দ্বিমাত্রিক অ্যারেতে মান অ্যাক্সেস করা
int value = grid[1, 1]; // ২য় সারি এবং ২য় কলাম
grid[2, 0] = 9; // ৩য় সারি এবং ১ম কলামের মান পরিবর্তন
উদাহরণ: দ্বিমাত্রিক অ্যারে ব্যবহার
using System;
namespace MultiDimensionalArrayExample
{
class Program
{
static void Main(string[] args)
{
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
// অ্যারের প্রতিটি উপাদান প্রদর্শন
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
Console.Write(matrix[i, j] + " ");
}
Console.WriteLine();
}
}
}
}
আউটপুট:
1 2 3
4 5 6
7 8 9
জাগড অ্যারে (Jagged Array)
জাগড অ্যারে হলো এমন একটি অ্যারে যার প্রতিটি উপাদান আবার একটি অ্যারে ধারণ করে। প্রতিটি সাব-অ্যারের দৈর্ঘ্য ভিন্ন হতে পারে।
জাগড অ্যারে ডিক্লেয়ার এবং ইনিশিয়ালাইজেশন
int[][] jaggedArray = new int[3][]; // তিনটি অ্যারে ধারণ করবে
jaggedArray[0] = new int[] { 1, 2 };
jaggedArray[1] = new int[] { 3, 4, 5 };
jaggedArray[2] = new int[] { 6 };
উদাহরণ: জাগড অ্যারে ব্যবহার
using System;
namespace JaggedArrayExample
{
class Program
{
static void Main(string[] args)
{
int[][] jaggedArray = {
new int[] { 1, 2, 3 },
new int[] { 4, 5 },
new int[] { 6, 7, 8, 9 }
};
for (int i = 0; i < jaggedArray.Length; i++)
{
for (int j = 0; j < jaggedArray[i].Length; j++)
{
Console.Write(jaggedArray[i][j] + " ");
}
Console.WriteLine();
}
}
}
}
আউটপুট:
1 2 3
4 5
6 7 8 9
একমাত্রিক এবং বহু-মাত্রিক অ্যারের তুলনা
| বৈশিষ্ট্য | একমাত্রিক অ্যারে | বহু-মাত্রিক অ্যারে |
|---|---|---|
| স্ট্রাকচার | এক লাইনে উপাদান রাখা | গ্রিড বা ম্যাট্রিক্স আকারে |
| ইনডেক্স | একটি ইনডেক্স ব্যবহার | প্রতিটি মাত্রার জন্য ইনডেক্স |
| সাধারণ ব্যবহার | সোজা ডেটা তালিকা | টেবিল, ম্যাট্রিক্স, ইত্যাদি |
সারসংক্ষেপ
সি শার্পে অ্যারে একই ধরনের একাধিক ডেটা সংরক্ষণে ব্যবহার করা হয়। একমাত্রিক অ্যারে এক লাইনে ডেটা সংরক্ষণ করে, যেখানে বহু-মাত্রিক অ্যারে টেবিল বা ম্যাট্রিক্স আকারে ডেটা সংরক্ষণ করে। জাগড অ্যারে একাধিক আকারের সাব-অ্যারে ধারণ করতে পারে, যা ডেটা সংরক্ষণে আরও নমনীয়তা প্রদান করে।
সি শার্পে (C#) ArrayList, List<T>, এবং Dictionary<TKey, TValue> হলো ডেটা সংরক্ষণ এবং ম্যানেজমেন্টের জন্য ব্যবহৃত কালেকশনগুলোর উদাহরণ। এগুলোর মাধ্যমে ডাইনামিক ডেটা ম্যানেজমেন্ট, কী-ভ্যালু পেয়ার, এবং জেনেরিক টাইপের ডেটা সংরক্ষণ করা যায়।
১. ArrayList
ArrayList হলো একটি নন-জেনেরিক কালেকশন, যা System.Collections নেমস্পেসে পাওয়া যায়। এটি যেকোনো ধরনের ডেটা সংরক্ষণ করতে পারে, এবং অ্যারের তুলনায় এর আকার ডাইনামিকভাবে বাড়ানো বা কমানো যায়। যেহেতু এটি নন-জেনেরিক, তাই object টাইপে যেকোনো ধরনের ডেটা সংরক্ষণ করা যায়, কিন্তু টাইপ সেফটি নিশ্চিত করে না।
ArrayList এর গঠন এবং উদাহরণ
using System;
using System.Collections;
class Program
{
static void Main(string[] args)
{
ArrayList arrayList = new ArrayList();
// Adding elements
arrayList.Add(10);
arrayList.Add("Alice");
arrayList.Add(3.14);
arrayList.Add(true);
// Displaying elements
foreach (var item in arrayList)
{
Console.WriteLine("Element: " + item);
}
// Removing element
arrayList.Remove("Alice");
// Displaying after removal
Console.WriteLine("\nAfter Removal:");
foreach (var item in arrayList)
{
Console.WriteLine("Element: " + item);
}
}
}
আউটপুট:
Element: 10
Element: Alice
Element: 3.14
Element: True
After Removal:
Element: 10
Element: 3.14
Element: True
২. List<T>
List<T> হলো একটি জেনেরিক কালেকশন, যা System.Collections.Generic নেমস্পেসে পাওয়া যায়। এটি শুধুমাত্র নির্দিষ্ট ডেটা টাইপের আইটেম সংরক্ষণ করে এবং টাইপ সেফটি নিশ্চিত করে। List<T> অ্যারে থেকে বেশি ফ্লেক্সিবল, এবং এতে .Add(), .Remove(), .Insert() ইত্যাদি মেথড রয়েছে।
List<T> এর গঠন এবং উদাহরণ
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
List<int> numbers = new List<int> { 10, 20, 30 };
// Adding elements
numbers.Add(40);
numbers.Add(50);
// Displaying elements
foreach (int number in numbers)
{
Console.WriteLine("Number: " + number);
}
// Removing element
numbers.Remove(20);
// Displaying after removal
Console.WriteLine("\nAfter Removal:");
foreach (int number in numbers)
{
Console.WriteLine("Number: " + number);
}
}
}
আউটপুট:
Number: 10
Number: 20
Number: 30
Number: 40
Number: 50
After Removal:
Number: 10
Number: 30
Number: 40
Number: 50
৩. Dictionary<TKey, TValue>
Dictionary<TKey, TValue> হলো একটি কী-ভ্যালু পেয়ার কালেকশন, যা System.Collections.Generic নেমস্পেসে পাওয়া যায়। এটি একটি নির্দিষ্ট কী এবং মানের সমন্বয়ে ডেটা সংরক্ষণ করে এবং ডুপ্লিকেট কী সমর্থন করে না। ডিকশনারি সাধারণত দ্রুত অনুসন্ধানের জন্য ব্যবহৃত হয়, এবং এর মাধ্যমে কী ব্যবহার করে মানে দ্রুত অ্যাক্সেস করা যায়।
Dictionary<TKey, TValue> এর গঠন এবং উদাহরণ
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
Dictionary<int, string> students = new Dictionary<int, string>();
// Adding elements
students.Add(101, "Alice");
students.Add(102, "Bob");
students.Add(103, "Charlie");
// Displaying elements
foreach (KeyValuePair<int, string> student in students)
{
Console.WriteLine("ID: " + student.Key + ", Name: " + student.Value);
}
// Removing an element by key
students.Remove(102);
// Displaying after removal
Console.WriteLine("\nAfter Removal:");
foreach (KeyValuePair<int, string> student in students)
{
Console.WriteLine("ID: " + student.Key + ", Name: " + student.Value);
}
}
}
আউটপুট:
ID: 101, Name: Alice
ID: 102, Name: Bob
ID: 103, Name: Charlie
After Removal:
ID: 101, Name: Alice
ID: 103, Name: Charlie
ArrayList, List<T>, এবং Dictionary<TKey, TValue> এর তুলনা
| বৈশিষ্ট্য | ArrayList | List<T> | Dictionary<TKey, TValue> |
|---|---|---|---|
| টাইপ সেফটি | না | হ্যাঁ | হ্যাঁ |
| অ্যাড এবং রিমুভ | .Add(), .Remove() | .Add(), .Remove() | .Add(), .Remove(key) |
| ইনডেক্স অনুযায়ী অ্যাক্সেস | হ্যাঁ | হ্যাঁ | না, কিন্তু কী ব্যবহার করে মান অ্যাক্সেসযোগ্য |
| কী-ভ্যালু পেয়ার | না | না | হ্যাঁ, কী-ভ্যালু পেয়ার |
| ব্যবহারের সহজতা | যেকোনো ধরনের ডেটা সংরক্ষণযোগ্য | নির্দিষ্ট ডেটা টাইপ সংরক্ষণযোগ্য | দ্রুত অনুসন্ধান এবং কী-ভিত্তিক অ্যাক্সেসযোগ্য |
সারসংক্ষেপ
সি শার্পে ArrayList, List<T>, এবং Dictionary<TKey, TValue> ডেটা সংরক্ষণ এবং ম্যানেজমেন্টের জন্য ব্যবহৃত কালেকশন। ArrayList হলো একটি নন-জেনেরিক কালেকশন, যা যেকোনো ধরনের ডেটা সংরক্ষণ করতে পারে, কিন্তু টাইপ সেফ নয়। List<T> হলো জেনেরিক এবং টাইপ সেফ, যেখানে নির্দিষ্ট ডেটা টাইপ সংরক্ষণ করা যায়। Dictionary<TKey, TValue> হলো একটি কী-ভ্যালু পেয়ার কালেকশন, যা দ্রুত অনুসন্ধান এবং কী ভিত্তিক ডেটা অ্যাক্সেসের জন্য ব্যবহৃত হয়।
লিংকড লিস্ট এবং সেট ডেটা স্ট্রাকচার সি শার্পে (C#) ব্যবহৃত হয় ডেটা সংরক্ষণ এবং অ্যাক্সেসের জন্য। প্রতিটি স্ট্রাকচার বিভিন্ন উদ্দেশ্যে কার্যকর এবং তাদের নিজস্ব সুবিধা ও সীমাবদ্ধতা রয়েছে। লিংকড লিস্ট এবং সেট সম্পর্কে বিস্তারিত আলোচনা করা হলো।
লিংকড লিস্ট (Linked List)
লিংকড লিস্ট হলো একটি ডেটা স্ট্রাকচার, যেখানে ডেটা উপাদানগুলো আলাদা আলাদা নোড হিসেবে সংরক্ষিত থাকে। প্রতিটি নোডে একটি ডেটা এবং একটি পয়েন্টার থাকে যা পরবর্তী নোডের ঠিকানা ধারণ করে।
সি শার্পে লিংকড লিস্ট তৈরি করা
সি শার্পে LinkedList<T> জেনেরিক ক্লাস ব্যবহার করে লিংকড লিস্ট তৈরি করা হয়। এটি System.Collections.Generic নেমস্পেসের অন্তর্ভুক্ত।
উদাহরণ: লিংকড লিস্ট তৈরি এবং ব্যবহারের জন্য
using System;
using System.Collections.Generic;
namespace LinkedListExample
{
class Program
{
static void Main(string[] args)
{
// লিংকড লিস্ট ডিক্লেয়ারেশন এবং ইনিশিয়ালাইজেশন
LinkedList<string> names = new LinkedList<string>();
// লিংকড লিস্টে উপাদান যোগ করা
names.AddLast("Alice");
names.AddLast("Bob");
names.AddFirst("Charlie");
// লিংকড লিস্ট প্রদর্শন
foreach (string name in names)
{
Console.WriteLine(name);
}
// নির্দিষ্ট অবস্থানে উপাদান যোগ করা
LinkedListNode<string> node = names.Find("Alice");
names.AddAfter(node, "Dave");
Console.WriteLine("\nAfter Adding 'Dave' After 'Alice':");
foreach (string name in names)
{
Console.WriteLine(name);
}
}
}
}
আউটপুট:
plaintext
Copy code
Charlie
Alice
Bob
After Adding 'Dave' After 'Alice':
Charlie
Alice
Dave
Bob
লিংকড লিস্টের সুবিধা
- ডাইনামিক মেমোরি ব্যবস্থাপনা: ডেটা সংরক্ষণে স্থির আকারের প্রয়োজন হয় না।
- ইনসার্ট এবং ডিলিট দ্রুত: যেকোনো অবস্থানে সহজেই ডেটা যোগ বা মুছে ফেলা যায়।
- পরিবর্তনযোগ্য: নোডের সংখ্যা বৃদ্ধি বা হ্রাস করা যায়।
লিংকড লিস্টের অসুবিধা
- অ্যাক্সেস টাইম: ইনডেক্স দিয়ে সরাসরি অ্যাক্সেস করা যায় না।
- মেমোরি ব্যবহারের হার: প্রতিটি নোডে অতিরিক্ত পয়েন্টারের জন্য অতিরিক্ত মেমোরি প্রয়োজন।
সেট (Set)
সেট হলো এমন একটি ডেটা স্ট্রাকচার, যেখানে ডুপ্লিকেট উপাদান রাখা হয় না। প্রতিটি উপাদান সেটে অনন্য হয় এবং সেটে উপাদানগুলোর কোন নির্দিষ্ট ক্রম থাকে না।
সি শার্পে HashSet<T> এবং SortedSet<T> ক্লাস ব্যবহার করে সেট তৈরি করা হয়।
- HashSet<T>: একটি অনির্দিষ্ট ক্রমে উপাদান সংরক্ষণ করে।
- SortedSet<T>: উপাদানগুলোকে স্বয়ংক্রিয়ভাবে সাজানো ক্রমে সংরক্ষণ করে।
উদাহরণ: HashSet ব্যবহার করে সেট তৈরি
using System;
using System.Collections.Generic;
namespace SetExample
{
class Program
{
static void Main(string[] args)
{
HashSet<int> numbers = new HashSet<int>();
// সেটে উপাদান যোগ করা
numbers.Add(10);
numbers.Add(20);
numbers.Add(30);
numbers.Add(20); // ডুপ্লিকেট, তাই সেটে যোগ হবে না
Console.WriteLine("HashSet Elements:");
foreach (int number in numbers)
{
Console.WriteLine(number);
}
// একটি নির্দিষ্ট উপাদান আছে কিনা যাচাই
Console.WriteLine("\nContains 20: " + numbers.Contains(20));
}
}
}
আউটপুট:
HashSet Elements:
10
20
30
Contains 20: True
উদাহরণ: SortedSet ব্যবহার করে সেট তৈরি
using System;
using System.Collections.Generic;
namespace SortedSetExample
{
class Program
{
static void Main(string[] args)
{
SortedSet<string> fruits = new SortedSet<string>();
// SortedSet এ উপাদান যোগ করা
fruits.Add("Apple");
fruits.Add("Banana");
fruits.Add("Mango");
fruits.Add("Banana"); // ডুপ্লিকেট, তাই সেটে যোগ হবে না
Console.WriteLine("SortedSet Elements:");
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
}
}
}
আউটপুট:
SortedSet Elements:
Apple
Banana
Mango
সেটের সুবিধা
- ডুপ্লিকেট হ্রাস: শুধুমাত্র অনন্য উপাদান ধারণ করে।
- দ্রুত অনুসন্ধান:
HashSet-এ অনুসন্ধান অপারেশন দ্রুত সম্পন্ন হয়। - ক্রমানুসারে সংরক্ষণ:
SortedSetউপাদানগুলোকে স্বয়ংক্রিয়ভাবে ক্রমানুসারে রাখে।
সেটের অসুবিধা
- ডুপ্লিকেট সাপোর্ট নেই: ডুপ্লিকেট মান রাখা সম্ভব নয়।
- কোনো নির্দিষ্ট ক্রম নেই (HashSet):
HashSet-এ উপাদানগুলোর কোনো নির্দিষ্ট ক্রম থাকে না।
লিংকড লিস্ট এবং সেটের তুলনা
| বৈশিষ্ট্য | লিংকড লিস্ট | সেট |
|---|---|---|
| ডুপ্লিকেট | ডুপ্লিকেট সংরক্ষণ করা যায় | ডুপ্লিকেট অনুমোদিত নয় |
| ইনডেক্স | ইনডেক্স ব্যবহারে সরাসরি অ্যাক্সেস নেই | ইনডেক্স ব্যবহারে সরাসরি অ্যাক্সেস নেই |
| সংরক্ষণ | পয়েন্টার ভিত্তিক | হ্যাশ বা সটিং ভিত্তিক |
| ব্যবহার | ডাইনামিক আকারের তালিকা | অনন্য উপাদানের সংগ্রহ |
| ক্রম | ইনডেক্স ভিত্তিক, সাধারণত ক্রম থাকে | HashSet-এ কোনো ক্রম নেই; SortedSet-এ ক্রমানুসারে থাকে |
সারসংক্ষেপ
সি শার্পে লিংকড লিস্ট এবং সেট বিভিন্ন ধরনের ডেটা সংরক্ষণের জন্য কার্যকর। লিংকড লিস্ট ডায়নামিক আকারের তালিকা তৈরি করতে সহায়ক, যেখানে সহজে উপাদান যোগ এবং মুছে ফেলা যায়। অন্যদিকে, সেট ডুপ্লিকেট উপাদান ছাড়া একটি সংগ্রহ তৈরি করতে ব্যবহৃত হয় এবং সাধারণত দ্রুত অনুসন্ধান ও ক্রমানুসারে উপাদান সংরক্ষণ করতে সাহায্য করে।
Read more