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.

🕑 12 daqiqa o‘qish 📄 596 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. E'lon qilish
  2. Eng ko'p adashtiradigan joy
  3. Chegaralarni bilish
  4. Indeksdan chiqib ketish
  5. O'lchamni o'zgartirish
  6. Array sinfi metodlari
  7. Ko'p o'lchovli massiv
  8. Tishli massiv
  9. Massivni nusxalash
  10. Bo'sh massiv
  11. Xulosa

Massiv - bir turdagi qiymatlarning tartiblangan to'plami. Har bir element indeks orqali olinadi.

E'lon qilish #

VB
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
Natija
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 #

VB
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
Natija
5
1

Dim a(4) beshta element yaratdi, to'rtta emas.

Qavsdagi son - eng katta indeks, element soni 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 #

VB
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
Natija
3
2
0
0: Namangan
1: Andijon
2: Farg'ona
IfodaMa'nosi
LengthElementlar 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 #

VB
Dim a() As Integer = {1, 2, 3}
Console.WriteLine(a(3))   ' xato!

Bu dasturni to'xtatadi:

Natija
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 #

VB
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
Natija
10, 20, 30, 40, 50
0, 0
Preserve so'zini unutmang

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 #

VB
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
Natija
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 #

VB
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
Natija
   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:

VB
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
Natija
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 #

VB
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
Natija
99, 2, 3
99, 2, 3
1, 77, 3
Massiv - havola turi

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 #

VB
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
Natija
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.

Amaliy topshiriq
  1. Beshta shahar nomini massivga solib, hammasini chiqaring.
  2. Dim a(9) As Integer da nechta element borligini tekshiring.
  3. Massivning oxirgi elementini UBound yordamida oling.
  4. Mavjud bo'lmagan indeksga murojaat qilib, xato nomini yozib oling.
  5. Uchta elementli massivni ReDim Preserve bilan beshtaga kengaytiring.
  6. Preserve siz ReDim qilib, qiymatlarga nima bo'lishini ko'ring.
  7. Sonlar massivini saralang va teskari aylantiring.
  8. 3x3 jadval yasab, diagonal yig'indisini hisoblang.
  9. Tishli massiv bilan uchta turli uzunlikdagi guruh yarating.
  10. 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.
  • ReDim qiymatlarni yo'qotadi, ReDim Preserve saqlaydi - lekin ikkalasi ham yangi massiv yaratadi.
  • Array.Sort va Array.Reverse massivning o'zini o'zgartiradi.
  • Dim jadval(2, 3) - 3 qator, 4 ustun.
  • Massiv - havola turi: b = a nusxa yaratmaydi, Clone() yaratadi.
  • Bo'sh massiv va Nothing - bir xil narsa emas.

Keyingi bo'limda o'zgaruvchan o'lchamli kolleksiyalarni ko'ramiz.

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.