9-bo‘lim
Kolleksiyalar
List(Of T) bilan o'zgaruvchan ro'yxat, Dictionary kalit-qiymat juftliklari, HashSet, Queue va Stack, hamda tartib kafolati haqida.
Ushbu bo‘lim mundarijasi
Massiv o'lchami qat'iy. Haqiqiy dasturlarda esa element qo'shish va o'chirish kerak bo'ladi - buning uchun kolleksiyalar bor.
List(Of T) #
Module Dastur
Sub Main()
Dim shaharlar As New List(Of String)
shaharlar.Add("Namangan")
shaharlar.Add("Andijon")
shaharlar.Add("Farg'ona")
Console.WriteLine(shaharlar.Count)
Console.WriteLine(shaharlar(0))
Console.WriteLine(String.Join(", ", shaharlar))
End Sub
End Module
3
Namangan
Namangan, Andijon, Farg'ona
New List(Of String) bo'sh ro'yxat yaratadi, Add esa unga element
qo'shadi. Massivdan farqli o'laroq, o'lchamni oldindan aytish shart
emas.
Endi o'chirish va qo'shishni ko'ramiz:
Module Dastur
Sub Main()
Dim shaharlar As New List(Of String) From {
"Namangan", "Andijon", "Farg'ona"
}
Console.WriteLine(String.Join(", ", shaharlar))
shaharlar.Remove("Andijon")
Console.WriteLine(String.Join(", ", shaharlar))
shaharlar.Insert(1, "Qo'qon")
Console.WriteLine(String.Join(", ", shaharlar))
Console.WriteLine(shaharlar.Contains("Namangan"))
Console.WriteLine(shaharlar.IndexOf("Qo'qon"))
End Sub
End Module
Namangan, Andijon, Farg'ona
Namangan, Farg'ona
Namangan, Qo'qon, Farg'ona
True
1
| Metod | Nima qiladi |
|---|---|
Add | Oxiriga qo'shadi |
Insert(i, x) | Ko'rsatilgan joyga qo'yadi |
Remove(x) | Qiymat bo'yicha o'chiradi |
RemoveAt(i) | Indeks bo'yicha o'chiradi |
Count | Elementlar soni |
Contains | Bormi |
Clear | Hammasini o'chiradi |
Massivda Length, kolleksiyada Count ishlatiladi.
Sababi tarixiy, lekin qoida oddiy: qavsli e'lon qilingan massivda -
Length, List va boshqa kolleksiyalarda - Count.
From bilan to'ldirish #
Module Dastur
Sub Main()
Dim ballar As New List(Of Integer) From {85, 92, 78, 95}
ballar.Sort()
Console.WriteLine(String.Join(", ", ballar))
Console.WriteLine(ballar.Sum())
Console.WriteLine(ballar.Average())
Console.WriteLine(ballar.Max())
End Sub
End Module
78, 85, 92, 95
350
87.5
95
Ro'yxat bo'ylab yurish #
Module Dastur
Sub Main()
Dim talabalar As New List(Of String) From {
"Malika", "Aziza", "Kamola"
}
For Each talaba As String In talabalar
Console.WriteLine($"- {talaba}")
Next
For i As Integer = 0 To talabalar.Count - 1
Console.WriteLine($"{i + 1}. {talabalar(i)}")
Next
End Sub
End Module
- Malika
- Aziza
- Kamola
1. Malika
2. Aziza
3. Kamola
For Each bajarilayotganda ro'yxatni o'zgartirish xatoga olib
keladi:
For Each x In royxat
royxat.Remove(x) ' InvalidOperationException
Next
To'g'ri yo'llari:
- Teskari tartibda indeks bilan yurish:
For i = royxat.Count - 1 To 0 Step -1 - Yoki
royxat.RemoveAll(Function(x) shart)ishlatish.
Module Dastur
Sub Main()
Dim sonlar As New List(Of Integer) From {1, 2, 3, 4, 5, 6, 7, 8}
sonlar.RemoveAll(Function(x) x Mod 2 = 0)
Console.WriteLine(String.Join(", ", sonlar))
End Sub
End Module
1, 3, 5, 7
Dictionary - kalit va qiymat #
Module Dastur
Sub Main()
Dim poytaxtlar As New Dictionary(Of String, String)
poytaxtlar.Add("O'zbekiston", "Toshkent")
poytaxtlar.Add("Qozog'iston", "Ostona")
poytaxtlar("Qirg'iziston") = "Bishkek"
Console.WriteLine(poytaxtlar("O'zbekiston"))
Console.WriteLine(poytaxtlar.Count)
Console.WriteLine(poytaxtlar.ContainsKey("Tojikiston"))
End Sub
End Module
Toshkent
3
False
Mavjud bo'lmagan kalit #
Module Dastur
Sub Main()
Dim narxlar As New Dictionary(Of String, Integer) From {
{"olma", 12000},
{"anor", 18000}
}
Dim narx As Integer
If narxlar.TryGetValue("anor", narx) Then
Console.WriteLine($"Anor narxi: {narx}")
End If
If Not narxlar.TryGetValue("banan", narx) Then
Console.WriteLine("Banan ro'yxatda yo'q")
End If
End Sub
End Module
Anor narxi: 18000
Banan ro'yxatda yo'q
narxlar("banan") deb yozsangiz va bunday kalit bo'lmasa,
KeyNotFoundException chiqadi.
Shuning uchun kalit borligiga ishonchingiz komil bo'lmasa,
TryGetValue yoki ContainsKey ishlating.
Add ham shunday: mavjud kalitni qayta qo'shsangiz xato chiqadi.
narxlar(kalit) = qiymat esa xato bermaydi - bori ustiga yozadi.
Tartib kafolatlanmagan #
Module Dastur
Sub Main()
Dim yoshlar As New Dictionary(Of String, Integer) From {
{"Malika", 22}, {"Husanboy", 25}, {"Aziza", 20}
}
For Each juft In yoshlar.OrderBy(Function(x) x.Key)
Console.WriteLine($"{juft.Key}: {juft.Value}")
Next
End Sub
End Module
Aziza: 20
Husanboy: 25
Malika: 22
Dictionary elementlarni hech qanday tartibda saqlamaydi. Bugun
qo'shilgan tartibda chiqishi mumkin, ertaga - yo'q.
Bu .NET ning ichki ishlash tafsiloti va u versiyadan versiyaga
o'zgarishi mumkin.
Shuning uchun yuqoridagi misolda OrderBy ishlatilgan. Tartib muhim
bo'lsa - har doim aniq saralang. Doimiy tartib kerak bo'lsa,
SortedDictionary ham bor.
HashSet - takrorlanmas to'plam #
Module Dastur
Sub Main()
Dim harflar As New HashSet(Of String)
Console.WriteLine(harflar.Add("a"))
Console.WriteLine(harflar.Add("b"))
Console.WriteLine(harflar.Add("a"))
Console.WriteLine(harflar.Count)
Dim sonlar As New List(Of Integer) From {1, 2, 2, 3, 3, 3, 4}
Dim noyob As New HashSet(Of Integer)(sonlar)
Console.WriteLine(noyob.Count)
End Sub
End Module
True
True
False
2
4
Add metodi Boolean qaytaradi: False - bu element allaqachon bor
edi. Takrorlarni olib tashlashning eng tez usuli shu.
Queue va Stack #
Module Dastur
Sub Main()
Dim navbat As New Queue(Of String)
navbat.Enqueue("birinchi")
navbat.Enqueue("ikkinchi")
navbat.Enqueue("uchinchi")
Console.WriteLine(navbat.Dequeue())
Console.WriteLine(navbat.Dequeue())
Dim stek As New Stack(Of String)
stek.Push("birinchi")
stek.Push("ikkinchi")
stek.Push("uchinchi")
Console.WriteLine(stek.Pop())
Console.WriteLine(stek.Pop())
End Sub
End Module
birinchi
ikkinchi
uchinchi
ikkinchi
| Tuzilma | Qoida | Hayotdagi misol |
|---|---|---|
Queue | Birinchi kirgan birinchi chiqadi | Kassadagi navbat |
Stack | Oxirgi kirgan birinchi chiqadi | Ustma-ust qo'yilgan tarelkalar |
Qaysi birini tanlash #
- Beshta talaba ismini
List(Of String)ga qo'shing. - Ro'yxatdan bittasini
Removebilan o'chiring. Insertbilan ro'yxat o'rtasiga yangi ism qo'ying.- Sonlar ro'yxatidan juftlarini
RemoveAllbilan olib tashlang. - Mahsulot-narx juftliklaridan
Dictionaryyasang. - Mavjud bo'lmagan kalitni
TryGetValuebilan xavfsiz so'rang. Dictionaryni kalit bo'yicha saralab chiqaring.- Takrorlangan sonlar ro'yxatidan
HashSetbilan noyoblarini oling. Queuebilan uchta vazifani navbatga qo'yib, bajaring.Stackbilan so'zni teskari o'qing.
Xulosa #
List(Of T)- o'lchami o'zgaradigan tartibli ro'yxat; massivdan farqiCount(Lengthemas).For Eachichida ro'yxatni o'zgartirish xato beradi -RemoveAllyoki teskari indeks sikli ishlating.Dictionarykalit orqali qidiradi; mavjud bo'lmagan kalit dasturni to'xtatadi, shuning uchunTryGetValue.Dictionarytartibni kafolatlamaydi - kerak bo'lsaOrderByyokiSortedDictionary.HashSettakrorlarni o'zi rad etadi;AddFalseqaytarsa - element allaqachon bor edi.Queue- navbat,Stack- stek.- Shubhalansangiz
List(Of T)dan boshlang.
Keyingi bo'limda protseduralar - Sub va Function ni o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.