Intersect

Mamataliyev Diyorbek

Ikkita to'plamning kesishmasi deb, bu to'plamlarning har ikkalasida ham mavjud bo'lgan elementlardan tuzilgan to’plamga aytilishini siz yaxshi bilasiz. LINQdagi Intersect metodi bizga ikkita to’plamning kesishmasini, ya’ni bu to’plamlarning har ikkoviga ham tegishli elementlarni olish imkoniyatini beradi.

Metod quyidagi ko'rinishda ishlatiladi:

var kesishma=Birinchi_toplam.Intersect(Ikkinchi_toplam);
circle-info

Eslatma: A ∩ B = B ∩ A bo’lgani uchun to’plamlarning qaysi biri avval, qaysi biri keyin yozilishining umuman ahamiyati yo’q, baribir natija bir xil bo’ladi.

Intersect metodiga parametr sifatida kiritilayotgan to’plamlarning biri yoki ikkalasi null ga teng bo’lganida ArgumentNullExeption xatoligi yuzaga keladi.

Keling, soddaroq misol sifatida ikkita sonlar to’plamining kesishmasini olib ko’ramiz:

using System;
using System.Linq;
class dotnetuz
{
    public static void Main()
    {
        int[] A = { 1, 2, 5, 13, 4, 7, 9 };
        int[] B = { 0, 2, 5, 7, 8, 9, 10, 11 };
        int[] C = A.Intersect(B).ToArray();
        foreach (int item in C)
        {
            Console.WriteLine(item);
        }
        Console.ReadKey();
    }
}

Natija:

Ko'rib turganimizdek, dastur ishlashi natijasida to'plamlarning har ikkalasida mavjud bo'lgan elementlargina ekranga chiqarildi.

Endi bu metodni bitta classga tegishli obyektlar ustida ishlatib ko’raylik.

Keling, bitta hayotiy masala qo’yamiz: Aytaylik, o’quv markazida ikki xil kurs bor. Bu kurslarga qatnashayotgan o’quvchilarning alohida ikkita ro’yxati berilgan va har ikkala kursga ham qatnashuvchi o’quvchilarni ajratib berishimiz so’ralgan bo’lsin. Bu masalani LINQdan foydalanib hal qilib ko’ramiz.

Buning uchun, an’anaga sodiq qolgan holda qo’shimcha bitta Comparer sinf yaratib olamiz (aslida qanday nom berish ixtiyoringiz), va unga IEqualityComparer interfeysini implementatsiya qilib, Equals() va GetHashCode() metodlarini qayta yozib olamiz:

To’liq kod quyidagicha bo’ladi:

Natija:

Last updated

Was this helpful?