8-bo‘lim
Massivlar
Massiv e'lon qilish va nega Dim a(4) beshta element beradi, indeks, ReDim Preserve, ko'p o'lchovli va tishli massivlar, Array sinfi metodlari.
Ushbu bo‘lim mundarijasi
Massiv - bir turdagi qiymatlarning tartiblangan to'plami. Har bir element indeks orqali olinadi.
E'lon qilish #
Module Dastur
Sub Main()
Dim ballar() As Integer = {85, 92, 78, 95, 88}
Console.WriteLine(ballar(0))
Console.WriteLine(ballar(4))
Console.WriteLine(ballar.Length)
End Sub
End Module
85
88
5
Indeks noldan boshlanadi. Beshta elementli massivda oxirgi indeks -
4.
Diqqat: element ballar(0) deb olinadi, kvadrat qavs emas.
Boshqa ko'p tillarda ballar[0] yoziladi.
Eng ko'p adashtiradigan joy #
Module Dastur
Sub Main()
Dim a(4) As Integer
Console.WriteLine(a.Length)
Dim b(0) As String
Console.WriteLine(b.Length)
End Sub
End Module
5
1
Dim a(4) beshta element yaratdi, to'rtta emas.
Bu Visual Basic ni boshqa tillardan ajratib turadigan eng muhim tafsilot.
Dim a(4) As Integer - bu "to'rtta element" degani emas. Bu
"eng katta indeks 4 bo'lsin" degani, ya'ni a(0) dan a(4) gacha -
jami beshta element.
C# yoki Java dan kelgan odam Dim a(4) deb yozib, keyin a(4) ga
murojaat qilganda xato kutadi - lekin xato chiqmaydi.
Chalkashmaslik uchun eng oddiy yo'l: element soni ma'lum bo'lsa,
qiymatlar bilan e'lon qiling - Dim a() As Integer = {1, 2, 3}.
Chegaralarni bilish #
Module Dastur
Sub Main()
Dim shaharlar() As String = {"Namangan", "Andijon", "Farg'ona"}
Console.WriteLine(shaharlar.Length)
Console.WriteLine(UBound(shaharlar))
Console.WriteLine(LBound(shaharlar))
For i As Integer = 0 To shaharlar.Length - 1
Console.WriteLine($"{i}: {shaharlar(i)}")
Next
End Sub
End Module
3
2
0
0: Namangan
1: Andijon
2: Farg'ona
| Ifoda | Ma'nosi |
|---|---|
Length | Elementlar soni |
UBound(a) | Eng katta indeks (Length - 1) |
LBound(a) | Eng kichik indeks - har doim 0 |
For i = 0 To a.Length - 1 - massiv bo'ylab yurishning standart
shakli. - 1 ni unutmang.
Indeksdan chiqib ketish #
Dim a() As Integer = {1, 2, 3}
Console.WriteLine(a(3)) ' xato!
Bu dasturni to'xtatadi:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
Uchta elementli massivda indekslar 0, 1, 2. a(3) mavjud emas.
O'lchamni o'zgartirish #
Module Dastur
Sub Main()
Dim sonlar(2) As Integer
sonlar(0) = 10
sonlar(1) = 20
sonlar(2) = 30
ReDim Preserve sonlar(4)
sonlar(3) = 40
sonlar(4) = 50
Console.WriteLine(String.Join(", ", sonlar))
ReDim sonlar(1)
Console.WriteLine(String.Join(", ", sonlar))
End Sub
End Module
10, 20, 30, 40, 50
0, 0
ReDim massivni yangidan yaratadi va eski qiymatlarni yo'qotadi -
yuqoridagi ikkinchi natijada 0, 0 chiqqani shundan.
ReDim Preserve esa eski qiymatlarni ko'chirib oladi.
Lekin Preserve ham arzon emas: u yangi massiv yaratib, hamma
elementni nusxalaydi. Siklda ReDim Preserve qilish - sekin kod
belgisi. Bunday holatda List(Of T) ishlatish kerak, buni keyingi
bo'limda ko'ramiz.
Array sinfi metodlari #
Module Dastur
Sub Main()
Dim sonlar() As Integer = {42, 15, 8, 23, 4}
Array.Sort(sonlar)
Console.WriteLine(String.Join(", ", sonlar))
Array.Reverse(sonlar)
Console.WriteLine(String.Join(", ", sonlar))
Console.WriteLine(Array.IndexOf(sonlar, 23))
Console.WriteLine(sonlar.Max())
Console.WriteLine(sonlar.Min())
Console.WriteLine(sonlar.Sum())
End Sub
End Module
4, 8, 15, 23, 42
42, 23, 15, 8, 4
1
42
4
92
Diqqat: Array.Sort massivning o'zini o'zgartiradi, yangi massiv
qaytarmaydi.
Ko'p o'lchovli massiv #
Module Dastur
Sub Main()
Dim jadval(2, 3) As Integer
For qator As Integer = 0 To 2
For ustun As Integer = 0 To 3
jadval(qator, ustun) = (qator + 1) * (ustun + 1)
Next
Next
For qator As Integer = 0 To 2
For ustun As Integer = 0 To 3
Console.Write($"{jadval(qator, ustun)}".PadLeft(4))
Next
Console.WriteLine()
Next
Console.WriteLine($"Jami element: {jadval.Length}")
End Sub
End Module
1 2 3 4
2 4 6 8
3 6 9 12
Jami element: 12
Dim jadval(2, 3) - 3 qator va 4 ustun, ya'ni 12 element. Yana o'sha
qoida: qavsdagi son - eng katta indeks.
Tishli massiv #
Qatorlari turli uzunlikda bo'lsa, "massivlar massivi" ishlatiladi:
Module Dastur
Sub Main()
Dim guruhlar()() As String = {
New String() {"Malika", "Nodira"},
New String() {"Aziza", "Kamola", "Dilnoza"},
New String() {"Husanboy"}
}
For i As Integer = 0 To guruhlar.Length - 1
Console.WriteLine(
$"{i + 1}-guruh ({guruhlar(i).Length} kishi): " &
String.Join(", ", guruhlar(i)))
Next
End Sub
End Module
1-guruh (2 kishi): Malika, Nodira
2-guruh (3 kishi): Aziza, Kamola, Dilnoza
3-guruh (1 kishi): Husanboy
Qator oxiridagi & va yangi qatorga o'tish - uzun ifodani ikkiga
bo'lishning usuli. VB da bu _ belgisisiz ham ishlaydi.
Massivni nusxalash #
Module Dastur
Sub Main()
Dim asl() As Integer = {1, 2, 3}
Dim havola() As Integer = asl
Dim nusxa() As Integer = CType(asl.Clone(), Integer())
havola(0) = 99
nusxa(1) = 77
Console.WriteLine(String.Join(", ", asl))
Console.WriteLine(String.Join(", ", havola))
Console.WriteLine(String.Join(", ", nusxa))
End Sub
End Module
99, 2, 3
99, 2, 3
1, 77, 3
Dim havola = asl nusxa yaratmaydi. Ikkala nom ham xotiradagi
bir xil massivga ishora qiladi.
Shuning uchun havola(0) = 99 deganda asl ham o'zgardi.
Haqiqiy nusxa kerak bo'lsa - Clone() yoki Array.Copy ishlating.
Bu xatoni topish qiyin, chunki kod mantiqan to'g'ri ko'rinadi.
Bo'sh massiv #
Module Dastur
Sub Main()
Dim bosh() As Integer = {}
Console.WriteLine(bosh.Length)
Dim hech() As String = Nothing
Console.WriteLine(hech Is Nothing)
If hech Is Nothing OrElse hech.Length = 0 Then
Console.WriteLine("Ma'lumot yo'q")
End If
End Sub
End Module
0
True
Ma'lumot yo'q
Bo'sh massiv (Length = 0) va Nothing - bu ikki xil narsa.
Birinchisi mavjud lekin bo'sh, ikkinchisi umuman mavjud emas.
- Beshta shahar nomini massivga solib, hammasini chiqaring.
Dim a(9) As Integerda nechta element borligini tekshiring.- Massivning oxirgi elementini
UBoundyordamida oling. - Mavjud bo'lmagan indeksga murojaat qilib, xato nomini yozib oling.
- Uchta elementli massivni
ReDim Preservebilan beshtaga kengaytiring. PreservesizReDimqilib, qiymatlarga nima bo'lishini ko'ring.- Sonlar massivini saralang va teskari aylantiring.
- 3x3 jadval yasab, diagonal yig'indisini hisoblang.
- Tishli massiv bilan uchta turli uzunlikdagi guruh yarating.
- Massivni
Clone()bilan nusxalab, asl nusxa o'zgarmasligini isbotlang.
Xulosa #
- Element
a(0)shaklida olinadi - kvadrat qavs emas, oddiy qavs. Dim a(4)beshta element yaratadi: qavsdagi son - eng katta indeks.Length- elementlar soni,UBound- oxirgi indeks.ReDimqiymatlarni yo'qotadi,ReDim Preservesaqlaydi - lekin ikkalasi ham yangi massiv yaratadi.Array.SortvaArray.Reversemassivning o'zini o'zgartiradi.Dim jadval(2, 3)- 3 qator, 4 ustun.- Massiv - havola turi:
b = anusxa yaratmaydi,Clone()yaratadi. - Bo'sh massiv va
Nothing- bir xil narsa emas.
Keyingi bo'limda o'zgaruvchan o'lchamli kolleksiyalarni ko'ramiz.
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.