Class Program


Ob’ektlarni saralash. IComparable interfeysi



Download 24,1 Kb.
bet2/2
Sana23.01.2022
Hajmi24,1 Kb.
#404689
1   2
Bog'liq
interfeys nusqalash

Ob’ektlarni saralash. IComparable interfeysi

.NET darajasida o‘rnatilgan ko‘plab kollektsiyalar va massivlar saralashni qo‘llab-quvvatlaydi. Bitta usulda, odatda, Sort () deb ataladi. Masalan:

int[] numbers = new int[] { 97, 45, 32, 65, 83, 23, 15 };

Array.Sort(numbers);

foreach (int n in numbers)

    Console.WriteLine(n);

Biroq, Sort usuli faqatgina int yoki string kabi primitiv turlar uchun ishlaydi. Murakkab ob’ektlarni saralash uchun IComparable interfeysi qo‘llaniladi. U faqat bir usulga ega:

public interface IComparable

{

    int CompareTo(object o);



}

CompareTo usuli joriy ob’ektni object o parametri sifatida o‘tkaziladigan ob’ekt bilan solishtirish uchun mo‘ljallangan. Chiqishda u uchta qiymatdan biri bo‘lishi mumkin bo‘lgan butun sonni qaytaradi:

Noldan kichik. Demak, joriy ob’ekt parametr sifatida beriladigan ob’ektning oldida bo‘lishi kerak

Nolga teng. Demak, ikki ob’ekt ham teng

Noldan ko‘p. Demak, joriy ob’ekt parametr sifatida beriladigan ob’ektdan keyin bo‘lishi kerak

Masalan, Person sinfi mavjud:

class Person : IComparable

{

    public string Name { get; set; }



    public int Age { get; set; }

    public int CompareTo(object o)

    {

        Person p = o as Person;



        if (p != null)

            return this.Name.CompareTo(p.Name);

        else

            throw new Exception("Невозможно сравнить два объекта");

    }

}

Bu erda kelib chiqish mezoni sifatida Person ob’ektining Name xossasi tanlangan. Shuning uchun haqiqiy solishtirishda joriy ob’ektning Name xossasi va parametr orqali o‘tkazilgan ob’ektning Name xossalari o‘rnatilmoqda. Agar ob’ektni Person turiga keltirish mumkin bo‘lmasa, bundan tashqari chiqariladi.



Qo‘llanilishi:

Person p1 = new Person { Name = "Bill", Age = 34 };

Person p2 = new Person { Name = "Tom", Age = 23 };

Person p3 = new Person { Name = "Alice", Age = 21 };

 

Person[] people = new Person[] { p1, p2, p3 };



Array.Sort(people);

 

foreach(Person p in people)



{

    Console.WriteLine($"{p.Name} - {p.Age}");

}

IComparable interfeysi umumlashtirilgan versiyasiga ega, shuning uchun biz uni Person sinfida qoʻllashni qisqartirish va soddalashtirishimiz mumkin edi:



class Person : IComparable

{

    public string Name { get; set; }



    public int Age { get; set; }

    public int CompareTo(Person p)

    {

        return this.Name.CompareTo(p.Name);



    }

}

Komparatordan foydalanish



IComparable interfeysidan tashqari .NET platformasi IComparer:

interface IComparer

{

    int Compare(object o1, object o2);



}

Compare usuli ikki o1 va o2 ob’ektlarini taqqoslash uchun mo‘ljallangan. Shuningdek, u uchta qiymatni olib chiqish natijasiga qarab qaytaradi: birinchi ob’ekt ikkinchidan ko‘p bo‘lsa, soni 0 dan kam bo‘lsa, soni noldan kam bo‘ladi; agar ikkita ob’ektlar teng bo‘lsa, nol qaytadi.

Person ob’ektlarining komparatorini yaratamiz. Ushbu ob’ektlarni satr uzunligiga qarab solishtirilasi -Name xossasining qiymati bo'yicha:

class PeopleComparer : IComparer


{

    public int Compare(Person p1, Person p2)



    {

        if (p1.Name.Length > p2.Name.Length)

            return 1;

        else if (p1.Name.Length < p2.Name.Length)

            return -1;

        else

            return 0;

    }


}

Ushbu holatda IComparer interfeysining umumlashtirilgan versiyasidan foydalaniladi. Komparator qo‘llanilmoqda:

Person p1 = new Person { Name = "Bill", Age = 34 };

Person p2 = new Person { Name = "Tom", Age = 23 };

Person p3 = new Person { Name = "Alice", Age = 21 };

 

Person[] people = new Person[] { p1, p2, p3 };



Array.Sort(people, new PeopleComparer());

 

foreach(Person p in people)



{

    Console.WriteLine($"{p.Name} - {p.Age}");

}

Komparator ob’ekti Array.Sort () usulining ikkinchi parametri sifatida ko‘rsatiladi. Bunda Person sinfi IComparable interfeysini amalga oshiradimi yoki yo’qmi, muhim emas. Komparator tomonidan belgilangan saralash qoidalari katta ustuvor bo‘ladi. Boshida Person ob’ektlari yo‘lga qo‘yiladi, ularning nomlari kichik, oxirlari uzoq bo‘ladi:



Tom - 23

Bill - 34



Alice - 21
Download 24,1 Kb.

Do'stlaringiz bilan baham:
1   2




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish