HashSet<T> ক্লাসের কনস্ট্রাক্টর HashSet(IEnumerable<T> collection) ব্যবহার করে যেকোনো IEnumerable<T> সংগ্রহ (List, Array, অন্য HashSet, ইত্যাদি) থেকে একটি নতুন HashSet তৈরি করা যায়। এটি ডুপ্লিকেট অটোমেটিক্যালি সরিয়ে দেয়।
উদাহরণ ১: ইন্টিজার HashSet থেকে অন্য HashSet তৈরি
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
HashSet<int> set1 = new HashSet<int>();
set1.Add(100);
set1.Add(200);
set1.Add(300);
Console.WriteLine("মূল HashSet (set1)...");
foreach (int i in set1) {
Console.WriteLine(i);
}
// set1 থেকে নতুন HashSet তৈরি (কনস্ট্রাক্টর ব্যবহার)
HashSet<int> set2 = new HashSet<int>(set1);
Console.WriteLine("\nঅন্য সংগ্রহ থেকে তৈরি HashSet (set2)...");
foreach (int i in set2) {
Console.WriteLine(i);
}
}
}
আউটপুট
মূল HashSet (set1)... 100 200 300 অন্য সংগ্রহ থেকে তৈরি HashSet (set2)... 100 200 300
উদাহরণ ২: ডুপ্লিকেট উপাদানযুক্ত সংগ্রহ থেকে HashSet তৈরি (অটো ডুপ্লিকেট রিমুভ)
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
HashSet<string> set1 = new HashSet<string>();
set1.Add("জ্যাকব");
set1.Add("টম");
set1.Add("হ্যারি");
set1.Add("হ্যারি"); // ডুপ্লিকেট
set1.Add("টম"); // ডুপ্লিকেট
set1.Add("হ্যারি"); // ডুপ্লিকেট
Console.WriteLine("মূল HashSet (set1) - ডুপ্লিকেট যোগ করলেও একবারই থাকে...");
foreach (string i in set1) {
Console.WriteLine(i);
}
// set1 থেকে নতুন HashSet তৈরি
HashSet<string> set2 = new HashSet<string>(set1);
Console.WriteLine("\nঅন্য সংগ্রহ থেকে তৈরি HashSet (set2)...");
foreach (string i in set2) {
Console.WriteLine(i);
}
}
}
আউটপুট
মূল HashSet (set1) - ডুপ্লিকেট যোগ করলেও একবারই থাকে... জ্যাকব টম হ্যারি অন্য সংগ্রহ থেকে তৈরি HashSet (set2)... জ্যাকব টম হ্যারি
HashSet কনস্ট্রাক্টর ওভারলোডসমূহ
// ১. খালি HashSet (ডিফল্ট ক্যাপাসিটি, ডিফল্ট কম্পারার)
new HashSet<T>()
// ২. নির্দিষ্ট ক্যাপাসিটি (রিসাইজ এড়াতে)
new HashSet<T>(int capacity)
// ৩. অন্য সংগ্রহ থেকে তৈরি (এই আর্টিকেলের বিষয়)
new HashSet<T>(IEnumerable<T> collection)
// ৪. কাস্টম কম্পারার
new HashSet<T>(IEqualityComparer<T> comparer)
// ৫. সংগ্রহ + কাস্টম কম্পারার
new HashSet<T>(IEnumerable<T> collection, IEqualityComparer<T> comparer)
// ৬. ক্যাপাসিটি + কাস্টম কম্পারার
new HashSet<T>(int capacity, IEqualityComparer<T> comparer)
কেস-ইনসেনসিটিভ HashSet তৈরি করা
// কেস-ইনসেনসিটিভ HashSet (স্ট্রিং-এর জন্য)
var set = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
set.Add("Hello");
set.Add("HELLO"); // ডুপ্লিকেট হিসেবে বিবেচিত হবে
// ফলাফল: শুধু "Hello" থাকবে
// অন্য সংগ্রহ থেকে কেস-ইনসেনসিটিভ HashSet তৈরি
var source = new List<string> { "A", "a", "B", "b" };
var set2 = new HashSet<string>(source, StringComparer.OrdinalIgnoreCase);
// ফলাফল: "A", "B" (২টি উপাদান)
HashSet তৈরি করার পারফরম্যান্স ও জটিলতা
- সময় জটিলতা: O(n) যেখানে n = source.Count (প্রতিটি উপাদান Add হয়, O(1) গড়ে)
- স্পেস জটিলতা: O(n) - নতুন HashSet-র জন্য আলাদা মেমরি
- ডুপ্লিকেট হ্যান্ডলিং: অটোমেটিক্যালি শুধু ইউনিক উপাদান রাখে
- অর্ডার: সংরক্ষিত নয় (HashSet আনঅর্ডার্ড)
বিকল্প পদ্ধতি: LINQ ToHashSet() (.NET Core 2.0+ / .NET Standard 2.1+)
using System.Linq;
var list = new List<int> { 1, 2, 2, 3, 3, 3, 4 };
var set = list.ToHashSet(); // Extension method
// ফলাফল: {1, 2, 3, 4}
// কাস্টম কম্পারার সহ
var set2 = list.ToHashSet(StringComparer.OrdinalIgnoreCase); // স্ট্রিং-এর জন্য
HashSet vs List vs SortedSet - তৈরি করার সময়
| কলেকশন | কনস্ট্রাক্টর ফром IEnumerable | ডুপ্লিকেট হ্যান্ডলিং | অর্ডার |
|---|---|---|---|
| HashSet<T> | হ্যাঁ | অটো রিমুভ | আনঅর্ডার্ড |
| SortedSet<T> | হ্যাঁ | অটো রিমুভ | সর্টেড (O(log n) ইনসারশন) |
| List<T> | হ্যাঁ | রাখে (ডুপ্লিকেট অনুমোদিত) | ইনসারশন অর্ডার |
টিপ: ডুপ্লিকেট রিমুভ করার সবচেয়ে ফাস্ট উপায়: new HashSet<T>(collection) বা collection.Distinct().ToList() (LINQ)।