কম্পিউটার টিউটোরিয়াল

C#-তে অন্য একটি সংগ্রহ থেকে HashSet তৈরি করা

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)।

  1. C#-এ HashSet এবং নির্দিষ্ট কালেকশনে সাধারণ উপাদান আছে কিনা তা যাচাই করুন

  2. C#-এ কালেকশন (Collection) থেকে এলিমেন্ট রিট্রিভ (Retrieve) করা

  3. C#-এ HashSet (C# Set Collection)

  4. পাইথনে অন্য ডিকশনারির ভ্যালু থেকে ডিকশনারি তৈরি করা