অপারেটর সংক্ষেপে
| অপারেটর | কাজ | সেট থিওরি |
| Union | একাধিক কালেকশন একসাথে করে, ডুপ্লিকেট বাদ দিয়ে ইউনিক এলিমেন্ট রিটার্ন করে | A ∪ B |
| Intersect | দুই সিকোয়েন্সে সাধারণ (কমন) এলিমেন্ট রিটার্ন করে | A ∩ B |
| Except | প্রথম সিকোয়েন্স থেকে দ্বিতীয় সিকোয়েন্সের এলিমেন্ট বাদ দিয়ে বাকিগুলো রিটার্ন করে | A - B |
উদাহরণ
using System;
using System.Linq;
class Program {
static void Main() {
int[] count1 = { 1, 2, 3, 4 };
int[] count2 = { 2, 4, 7 };
var resultUnion = count1.Union(count2);
var resultIntersect = count1.Intersect(count2);
var resultExcept = count1.Except(count2);
Console.WriteLine("Union:");
foreach (var item in resultUnion) Console.WriteLine(item);
Console.WriteLine("\nIntersect:");
foreach (var item in resultIntersect) Console.WriteLine(item);
Console.WriteLine("\nExcept:");
foreach (var item in resultExcept) Console.WriteLine(item);
Console.ReadKey();
}
}
আউটপুট:
Union:
1
2
3
4
7
Intersect:
2
4
Except:
1
3
মহত্বপূর্ণ বৈশিষ্ট্য
- Deferred Execution: ফলাফল এনুমারেট করার সময়ই এক্সিকিউট হয়
- Distinct: Union এবং Intersect স্বয়ংক্রিয়ভাবে ডুপ্লিকেট সরিয়ে দেয়
- অর্ডার: Union-এ প্রথম সিকোয়েন্সের অর্ডার রক্ষা হয়, তারপর দ্বিতীয়র নয়ুনিক এলিমেন্ট
- কাস্টম কম্পেয়ারার:
Union(second, comparer) দিয়ে কাস্টম সমতা যাচাই করা যায়
কাস্টম অবজেক্টের জন্য উদাহরণ
class Product {
public int Id { get; set; }
public string Name { get; set; }
}
var list1 = new[] {
new Product { Id = 1, Name = "A" },
new Product { Id = 2, Name = "B" }
};
var list2 = new[] {
new Product { Id = 2, Name = "B" },
new Product { Id = 3, Name = "C" }
};
// ডিফল্ট রেফারেন্স কম্পেয়ারার ব্যবহার করবে (কন্টেন্ট কম্পেয়ার করবে না)
// কাস্টম কম্পেয়ারার দরকার:
var union = list1.Union(list2, new ProductComparer());
class ProductComparer : IEqualityComparer<Product> {
public bool Equals(Product x, Product y) => x.Id == y.Id;
public int GetHashCode(Product obj) => obj.Id.GetHashCode();
}
অন্য উপায় (Query Syntax)
var union = (from x in count1 select x)
.Union(from x in count2 select x);
var intersect = (from x in count1 select x)
.Intersect(from x in count2 select x);
var except = (from x in count1 select x)
.Except(from x in count2 select x);