C# tilida Array'ni ochganimizdan so'ng uni o'zgartira olmaymiz, chunki Array'lar C#'da immutable ya'ni o'zgarmas.
Lekin qonun-qoidalarni aylanib o'tishimiz mumkin. Ya'ni Array'ni List ga o'zgartirib, kerakli ishlarni bajarib (masalan undan biror-bir element'ni olib tashlash listName.Remove()) so'ng yana Listni Array'ga aylantirib qo'ya olamiz.
Lekin List tipida usha listName.Remove() qanday ishlaydi? Hozir birma-bir ko'rib chiqamiz.
1. Array'ni List tipiga o'tkazib olish
int[] array = { 1, 2, 3, 4, 5 };
List<int> list = new List<int>(array); // List<T>'ga aylantirish
2. List'dan elementni o'chirib tashlash
list.Remove(3); // 3 raqamini o'chiradi
array = list.ToArray(); // Qaytadan Array'ga aylantirish
// Array'ning qiymati {1, 2, 4, 5}
Array'imiz o'zgardi. Lekin bizga yordam bergan Remove()'ni ishlatganimizda (kapot ostida) xotirada nimalar sodir bo'ldi, endi hozir buni ko'rib chiqamiz.
1. Dinamik hajm o'zgarishi
-
CapacityvaCount.List<T>ning ikki muhim xususiyati bor -> Count (List'dagi mavjud bo'lgan elementlar soni) va Capacity (List o'zining hajmini o'zgartirmasdan umumiy nechta element saqlay olishi soni (qisqacha hajmi)).List<T>ochganimizda uningCapacitysi 0 ga teng bo'ladi. List'ga element qo'shganimiz sari agardaCountning soniCapacityning soniga teng bo'lib qolsaList<T>resize bo'ladi ya'ni hajmi o'zgaradi vaCapacityimiz avtomatik ravishda 4 taga oshadi.
2. Elementi o'chirib tashlash
Qachonki biz Remove() chaqirganimizda quyidagi ishlar sodir bo'ladi:
Remove()metodini chaqirganimizda, Listimiz birinchi bo'lib biz o'chirmoqchi bo'lgan element'ni qidiradi. Bu bolsa itaration ya'ni uni aylanib chiqishiga olib keladi.Element'ni topib uni o'chirib tashlagandan so'ng, o'chirib tashlangan element'dan keyingi (ya'ni o'ng taraf) elementlar o'chirib tashlanganning o'rnini bosish uchun chapga shift qilinadi ya'ni suriladi. (Agarda o'chirib tashlangan element so'ngi element bo'lsa unda shift qilinmaydi.)
Masalan sizda quyidagi list bor:
Index: 0 1 2 3 4
Values: [10, 20, 30, 40, 50]
Agarda siz 30ni o'chirib tashlasangiz list quyidagi ko'rinishga keladi:
Index: 0 1 2 3
Values: [10, 20, 40, 50]
3. Count'ning kamayishi
- Bitta element o'chib ketganidan so'ng Count'imiz bittaga kamayadi.
4. Xotiradagi ishlar
-
ListningCapacitysi element'ni o'chirib tashlaganimizdan so'ng bittaga kamaymayib qolmaydi.Listning tagida yotganArrayning hajmi usha-usha turaveradi va oldin qancha joy egallab turgan bo'lsa ushancha egallab turaveradi. Ammo bizRemove()qilishda to'xtamay davom etaversak buCountningCapacitydan o'ta sezilarli ravishda kichik bo'lishiga olib keladi. Bundan so'ng qachonki sizList<T>ga element qo'shganingizda,Capacityko'payish o'rniga kamayishi mumkin. Bu ish esaList<T>ning tagida yotgan Array'ning o'rniga yangiArrayochiladi va barcha element'lar u yerga ko'chirib o'tkaziladi.
Xulosa
Xulosa qilib aytadigan bo'lsak,
Remove()ishlatganimizda -> element qidiriladi, o'chirib tashlangandan so'ng qolgan elementlar chapga suriladi,Countkamayadi.
Xurmat bilan,
Muhammad Xodjayev
Top comments (0)