Umumiy bo‘lmagan kollektsiyalar
Umumlashtirilmagan yoki oddiy kolleksiyalar System.Collections nomlar maydonida aniqlangan. Ularning xususiyati shundan iborat: ularning faoliyati, funktsional imkoniyatlari ushbu nomlar fazosi bo‘lgan interfeyslarda tasvirlanadi.
Asosiy interfeyslarni ko‘rib chiqamiz:
Umumlashtirilmagan yoki oddiy kolleksiyalar System.Collections nomlar fazosida aniqlangan. Ularning xususiyati shundan iborat: ularning funktsionalligi, funktsional imkoniyatlari ushbu nomlar fazosida bo‘lgan interfeyslarda tasvirlanadi.
Asosiy interfeyslarni ko‘rib chiqamiz:
IEnumerable: GetEnumerator usulini belgilaydi. Ushbu usul ro‘yxatdan o‘tkazuvchini, ya’ni IEnumerator interfeysini amalga oshiradigan ayrim ob’ektni qaytaradi.
IEnumerator: ushbu interfeysni amalga oshirish kollektsiya elementlarini foreach tsikli yordamida tanlash imkonini beradi
ICollection: barcha umumlashtirilmagan kolleksiyalar uchun asos hisoblanadi, barcha umumlashtirilmagan kolleksiyalar uchun asosiy usullar va xususiyatlarni belgilaydi (masalan, CopyTo usuli va Count xususiyati). Mazkur interfeys IEnumerable interfeysidan meros bo‘lib, ular uchun bazaviy interfeys ham umumiy bo‘lmagan kollektsiyalarning barcha sinflari tomonidan amalga oshiriladi
ILISt: kollektsiya elementlarini tartibga ko‘ra olish imkonini beradi. Shuningdek, elementlarni manipulyatsiya qilish uchun bir qator usullarni belgilaydi: Add (elementlarni qoʻshish), Remove/RemoveAt (elementni olib tashlash) va boshqa.
IComparer: ikki ob’ektni solishish uchun int Compare(object x, object y) usulini belgilaydi
IDictionary: ob’ektlarni kalit-qiymati jo‘natish ko‘rinishida saqlash kerak bo‘lgan kollektsiyaning harakatini aniqlaydi: har bir ob’ekt uchun noyob kalit aniqlanadi va ushbu kalitga mos keladi
IDictionaryEnumerator: loyihani ro‘yxatdan o‘tkazuvchi usul va xossalarni belgilaydi
IEqualityComparer: ikkita Equals va GetHashCode usullarini belgilaydi, ular yordamida ikkita ob’ektlar tenglik predmetiga solishtiriladi
IStructuralComparer: ikki ob’ektni strukturaviy solishtirish uchun Compare usulini belgilaydi: shunday solishtirishda ob’ektlarga havola emas, balki ob’ektlarning bevosita tarkibi solishadi
IStructuralEquatable: ikki ob’ektning strukturaviy tengligini o‘tkazish imkonini beradi. IStructuralComparer interfeysi bilan ikki ob’ektning tarkibi solishtiriladi
Ushbu interfeyslar System.Collections nomlar fazosidagi quyidagi kollektsiyalar sinflari bilan amalga oshiriladi:
ArrayList: oddiy ob’ektlar kollektsiyasi sinfi. IList, ICollection, IEnumerable interfeyslarini amalga oshiradi
BitArray: bitlar qiymatlari massivini o‘z ichiga olgan kollektsiya sinfi. ICollection, IEnumerable interfeyslarini amalga oshiradi
Hashtable: hesh-jadvalni taqdim etadigan va “kalit-qiymati ” juft to‘plamlarini saqlaydigan kollektsiya sinfi
Queue: FIFO algoritmi bo‘yicha faoliyat ko‘rsatayotgan ob’ektlar navbatining sinfi («birinchi kirgang‘ birinchi chiqadi»). ICollection, IEnumerable interfeyslarini amalga oshiradi
SortedList: kalit bo‘yicha sortlangan «kalit-qiymati» juft to‘plamlarini saqlaydigan kollektsiya sinfi. ICollection, IDictionary, IEnumerable interfeyslarini amalga oshiradi
Stek: yig‘ish klassi
Ushbu kollektsiyalarning ayrim sinflarini ko‘rib chiqamiz.
Garchi C # tilida bitta turdagi ob’ektlar to‘plamini saqlaydigan massivlar mavjud bo‘lsa ham, ular bilan ishlash har doim ham qulay emas. Masalan, massiv fiksirlangan sondagi ob’ektlarni saqlaydi, lekin biz qancha ob’ektlarni zarur bo‘lishini bilmasligimiz ham mumkin. Bunda kollektsiyalarni qo‘llash qulay. Kollektsiyalarning yana bir qo‘shimchasi shundan iborat, ularning ayrimlari ma’lumotlarning standartli tuzilmalarini amalga oshiradi, masalan, turli maxsus vazifalarni hal etish uchun foydalanilishi mumkin bo‘lgan stek, navbat, loyiha.
Kolleksiyalar sinflarining aksariyati System.Collections, System.Collections.Generic va System.Collections.Specialized (maxsus kolleksiyalar sinflari) nomlari makonlarida mavjud. Shuningdek, vazifalarni parallel bajarish va ko‘p oqimli murojaatni foydalanishni ta’minlash uchun System.Collections.Concurrent nomlar fazosidagi kollektsiyalar sinflari qo‘llaniladi
ArrayList
Shuningdek, ArrayList sinfi ob’ektlar kollektsiyasini namoyish etadi. Agar har xil turdagi ob’ektlar – satrlar, sonlar va boshqa ob’ektlarni birgalikda saqlash zarur bo‘lsa, ushbu sinf buning uchun qulay bo‘ladi.
Shuningdek, ArrayList sinfi ob’ektlar kollektsiyasini namoyish etadi. Agar har xil turdagi ob’ektlar – satrlar, sonlar va boshqa ob’ektlarni birgalikda saqlash zarur bo‘lsa, ushbu sinf buning uchun mos bo‘ladi.
Sinfning asosiy usullari:
int Add (object value): ro‘yxatga value ob’ektini qo‘shadi
void AddRange (ICollection col): col kollektsiyasi ob’ektlarini ro‘yxatga qo‘shadi.
void Clear(): barcha elementlarni ro‘yxatdan olib tashlaydi
bool Contains (object value): ro‘yxatda value ob’ekti mavjudligini tekshiradi.
Mavjud bo‘lsa, true qaytaradi, aks holda false qaytaradi
void CopyTo (Array array): joriy ro‘yxatni array massiviga nusxalaydi.
ArrayList GetRange(int index, int count): index indeksidan boshlangan va ro‘yxatdagi count elementlari sonidan iborat ArrayList yangi ro‘yxatni qaytaradi.
int IndexOf (object value): elementning indeksini qaytaradi
void Insert (int index, object value): index indeksi bo‘yicha ro‘yxatga value ob’ektini qo‘shadi
void InsertRange (int index, ICollection col) ro‘yxatga index indeksidan boshlangan ICollection kollektsiyasini qo‘shadi.
int LastIndexOf (object value): ob’ektning ro‘yxatidagi oxirgi kirish indeksini qaytaradi
void Remove(object value): ob’ektni ro‘yxatdan olib tashlaydi
void RemoveAt (int index): index indeksi bo‘yicha elementni ro‘yxatdan olib tashlaydi
void RemoveRange (int index, int count): index indeksidan boshlab, count ro‘yxatidan elementlarni olib tashlaydi
void Reverse (): ro‘yxatni teskarisiga aylantiradi
void SetRange (int index, ICollection col): col kollektsiyasi elementlarini index indeksidan boshlab ro‘yxatga nusxa oladi
void Sort (): kollektsiyani saralaydi
Bundan tashqari, Count xossasi orqali ro‘yxatdagi elementlar sonini olish mumkin.
Misolda sinfdan foydalanishni ko‘rib chiqamiz.
using System;
using System.Collections;
namespace Collections
{
class Program
{
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add(2.3);//double turidagi ob’ektni ro‘yxatga kiritamiz
list.Add(55);//int turidagi ob’ektni ro‘yxatga kiritamiz
list.AddRange(new string[] {"Hello", "world"});
//miqdorlarni tanlash
foreach (object o in list)
{
Console.WriteLine(o);
}
//birinchi elementni olib tashlayman
list.RemoveAt(0);
//ro‘yxatni o‘zgartiramiz
list.Reverse();
//indeks bo‘yicha elementni olish
Console.WriteLine(list[0]);
//miqdorlarni tanlash
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
Console.ReadLine();
}
}
}
Birinchidan, ArrayList sinfi System.Collections nomlar fazosida joylashganligi sababli, kollektsiyalar bilan ishlashimiz uchun uni (using System.Collections;) qo‘shishimiz kerek bo‘ladi.
Dastlab, kolleksiya obʼyektini konstruktor orqali yaratamiz: ArrayList list = new ArrayList ();. Zarur boʻlganda, biz kolleksiyani massiga o‘xshash initsializatsiyasini amalga oshirishimiz mumkin, masalan, ArrayList list = new ArrayList () {1, 2, 5, «string», 7.7};
Keyinchalik har xil turdagi qiymatlarni qo‘shamiz. Ushbu kollektsiya sinfi, ko‘plab boshqa kollektsiyalar singari, ikkita qo‘shish usuliga ega: Add usuli orqali yagona ob’ekt va ob’ektlar to‘plami, masalan, massiv yoki boshqa kollektsiya AddRange usul orqali qo‘shiladi.
foreach tsikli orqali ro‘yxatning barcha ob’ektlariga o‘tishimiz mumkin. Mazkur kollektsiya faqat sonlar yoki satrlar emas, turli ob’ektlarni saqlashi uchun object: foreach (object o in list) turi tanlangan.
Ko‘plab kollektsiyalar, shu jumladan ArrayList, o‘chirishni Remove/RemoveAt usullari orqali amalga oshiradi. Bu holatda o‘chirilayotgan elementning indeksini RemoveAt usulga o‘zatish orqalibirinchi elementni o‘chiriladi.
Shuningdek, dastur oxirida kollektsiya elementlarini for tsikli yordamida ekranga chiqaramiz. Mazkur holatda kollektsiyalarni tanlash massiv kabi amalga oshiriladi. Kollektsiya elementlarining sonini Count xossasi orqali olishimiz mumkin
Indeksator yordamida kollektsiya elementinining indeksini massivga o‘xshash olish mumkin : object firstObj = list [0];
Do'stlaringiz bilan baham: |