HashSet<T> ক্লাসের ExceptWith(IEnumerable<T> other) মেথড বর্তমান HashSet-এ থেকে other সংগ্রহে উপস্থিত সব উপাদান সরিয়ে দেয়। এটি সেট থিওরির ডিফারেন্স (A - B) অপারেশনের সমান। মুল HashSet মডিফাই হয় (in-place) এবং কোনো ভ্যালু রিটার্ন করে না।
উদাহরণ ১: স্ট্রিং HashSet থেকে অন্য HashSet-র উপাদান সরানো
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(string[] args) {
HashSet<string> set1 = new HashSet<string>();
set1.Add("রায়ান");
set1.Add("টম");
set1.Add("এন্ডি");
set1.Add("টিম");
Console.WriteLine("HashSet1 উপাদানসমূহ...");
foreach (string res in set1) {
Console.WriteLine(res);
}
HashSet<string> set2 = new HashSet<string>();
set2.Add("জন");
set2.Add("জ্যাকব");
set2.Add("রায়ান");
set2.Add("টম");
set2.Add("এন্ডি");
set2.Add("টিম");
set2.Add("স্টিভ");
set2.Add("মার্ক");
Console.WriteLine("\nHashSet2 উপাদানসমূহ...");
foreach (string res in set2) {
Console.WriteLine(res);
}
Console.WriteLine("\nHashSet1 == HashSet2? = " + set1.Equals(set2)); // False
// set2-তে থেকে set1-র উপাদানগুলো সরানো (set2 মডিফাই হবে)
set2.ExceptWith(set1);
Console.WriteLine("\nset2.ExceptWith(set1) কল করার পর set2-র অবশিষ্ট উপাদান:");
foreach (string i in set2) {
Console.WriteLine(i);
}
}
}
আউটপুট
HashSet1 উপাদানসমূহ... রায়ান টম এন্ডি টিম HashSet2 উপাদানসমূহ... জন জ্যাকব রায়ান টম এন্ডি টিম স্টিভ মার্ক HashSet1 == HashSet2? = False set2.ExceptWith(set1) কল করার পর set2-র অবশিষ্ট উপাদান: জন জ্যাকব স্টিভ মার্ক
উদাহরণ ২: আরও একটি উদাহরণ
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(string[] args) {
HashSet<string> set1 = new HashSet<string>();
set1.Add("জ্যাকব");
set1.Add("রায়ান");
set1.Add("টম");
set1.Add("এন্ডি");
set1.Add("টিম");
set1.Add("স্টিভ");
set1.Add("মার্ক");
Console.WriteLine("HashSet1 উপাদানসমূহ...");
foreach (string res in set1) Console.WriteLine(res);
HashSet<string> set2 = new HashSet<string>();
set2.Add("কেভিন");
set2.Add("জ্যাকব");
set2.Add("রায়ান");
set2.Add("টম");
set2.Add("এন্ডি");
set2.Add("টিম");
set2.Add("স্টিভ");
set2.Add("মার্ক");
Console.WriteLine("\nHashSet2 উপাদানসমূহ...");
foreach (string res in set2) Console.WriteLine(res);
Console.WriteLine("\nHashSet1 == HashSet2? = " + set1.Equals(set2)); // False
set2.ExceptWith(set1);
Console.WriteLine("\nset2.ExceptWith(set1) কল করার পর set2-র অবশিষ্ট উপাদান:");
foreach (string i in set2) {
Console.WriteLine(i);
}
}
}
আউটপুট
HashSet1 উপাদানসমূহ... জ্যাকব রায়ান টম এন্ডি টিম স্টিভ মার্ক HashSet2 উপাদানসমূহ... কেভিন জ্যাকব রায়ান টম এন্ডি টিম স্টিভ মার্ক HashSet1 == HashSet2? = False set2.ExceptWith(set1) কল করার পর set2-র অবশিষ্ট উপাদান: কেভিন
গুরুত্বপূর্ণ পার্থক্য: ExceptWith vs LINQ Except
| বৈশিষ্ট্য | HashSet.ExceptWith | LINQ Enumerable.Except |
|---|---|---|
| মডিফিকেশন | ইন-প্লেস (মুল HashSet পরিবর্তন হয়) | নতুন সিকোয়েন্স রিটার্ন করে (মুল অপরিবর্তিত) |
| রিটার্ন টাইপ | void | IEnumerable<T> |
| পারফরম্যান্স | O(n) - হ্যাশ লুকআপ | O(n+m) - নতুন অ্যালোকেশন |
| অর্ডার সংরক্ষণ | না (HashSet অর্ডারদার নয়) | হ্যাঁ (সোর্স সিকোয়েন্সের অর্ডার) |
অন্যান্য সেট অপারেশন
IntersectWith(other)- শুধু সাধারণ উপাদান রাখে (ইন্টারসেকশন)UnionWith(other)- দুটি সেট একত্রিত করে (ইউনিয়ন)SymmetricExceptWith(other)- সিমেট্রিক ডিফারেন্স (শুধু যেগুলো একটি সেটে আছে)IsSubsetOf / IsSupersetOf / IsProperSubsetOf / IsProperSupersetOf- রিলেশন চেকOverlaps(other)- কমপক্ষে একটি সাধারণ উপাদান আছে কিনাSetEquals(other)- দুটি সেট সমান কিনা
টিপ: যদি মুল HashSet সংরক্ষণ করতে চান, তবে ExceptWith কল করার আগে কপি নিন: var copy = new HashSet<T>(original);