Bagikan melalui


Array di Visual Basic

Array adalah sekumpulan nilai, yang disebut sebagai elemen, dan saling terkait secara logis. Misalnya, array dapat terdiri dari jumlah siswa di setiap kelas di sekolah tata bahasa; setiap elemen array adalah jumlah siswa dalam satu kelas. Demikian pula, sebuah array dapat terdiri dari nilai siswa untuk suatu mata pelajaran; setiap elemen dalam array adalah satu nilai.

Dimungkinkan untuk menggunakan variabel individual untuk menyimpan setiap item data kami. Misalnya, jika aplikasi kami menganalisis nilai siswa, kita dapat menggunakan variabel terpisah untuk setiap nilai siswa, seperti englishGrade1, englishGrade2, dll. Pendekatan ini memiliki tiga batasan utama:

  • Kita harus tahu saat merancang tepat berapa banyak tingkat yang harus kita tangani.
  • Menangani nilai dalam jumlah besar dengan cepat menjadi rumit. Ini pada gilirannya membuat aplikasi jauh lebih mungkin memiliki bug serius.
  • Sulit untuk dipertahankan. Setiap nilai baru yang kami tambahkan mengharuskan aplikasi dimodifikasi, dikompresi ulang, dan disebarkan ulang.

Dengan menggunakan array, Anda dapat merujuk ke nilai terkait ini dengan nama yang sama, dan menggunakan angka yang disebut indeks atau subskrip untuk mengidentifikasi elemen individual berdasarkan posisinya dalam array. Indeks array berkisar dari 0 hingga satu kurang dari jumlah total elemen dalam array. Saat Anda menggunakan sintaks Visual Basic untuk menentukan ukuran array, Anda menentukan indeks tertingginya, bukan jumlah total elemen dalam array. Anda dapat bekerja dengan array sebagai unit, dan kemampuan untuk melakukan iterasi elemennya membebaskan Anda dari kebutuhan untuk mengetahui dengan tepat berapa banyak elemen yang dikandungnya pada waktu desain.

Beberapa contoh cepat sebelum penjelasan:

' Declare a single-dimension array of 5 numbers.
Dim numbers(4) As Integer

' Declare a single-dimension array and set its 4 values.
Dim numbers = New Integer() {1, 2, 4, 8}

' Change the size of an existing array to 16 elements and retain the current values.
ReDim Preserve numbers(15)

' Redefine the size of an existing array and reset the values.
ReDim numbers(15)

' Declare a 6 x 6 multidimensional array.
Dim matrix(5, 5) As Double

' Declare a 4 x 3 multidimensional array and set array element values.
Dim matrix = New Integer(,) {{1, 2, 3}, {2, 3, 4}, {3, 4, 5}, {4, 5, 6}}

' Declare a jagged array
Dim sales()() As Double = New Double(11)() {}

Elemen array pada array sederhana

Mari kita buat array bernama students untuk menyimpan jumlah siswa di setiap kelas di sekolah tata bahasa. Indeks elemen berkisar antara 0 hingga 6. Menggunakan array ini lebih sederhana daripada mendeklarasikan tujuh variabel.

Ilustrasi berikut menunjukkan students array. Untuk setiap elemen array:

  • Indeks elemen mewakili nilai (indeks 0 mewakili taman kanak-kanak).

  • Jumlah yang terdapat dalam elemen mengandung informasi tentang jumlah siswa di tingkat tersebut.

Diagram memperlihatkan deretan angka siswa

Contoh berikut berisi kode Visual Basic yang membuat dan menggunakan array:


Module SimpleArray
   Public Sub Main()
      ' Declare an array with 7 elements.
      Dim students(6) As Integer

      ' Assign values to each element.
      students(0) = 23
      students(1) = 19
      students(2) = 21
      students(3) = 17
      students(4) = 19
      students(5) = 20
      students(6) = 22
      
      ' Display the value of each element.
      For ctr As Integer = 0 To 6
         Dim grade As String = If(ctr = 0, "kindergarten", $"grade {ctr}")
         Console.WriteLine($"Students in {grade}: {students(ctr)}")
      Next
   End Sub
End Module
' The example displays the following output:
'     Students in kindergarten: 23
'     Students in grade 1: 19
'     Students in grade 2: 21
'     Students in grade 3: 17
'     Students in grade 4: 19
'     Students in grade 5: 20
'     Students in grade 6: 22

Contohnya melakukan tiga hal:

  • Ini mendeklarasikan students array dengan tujuh elemen. Angka 6 dalam deklarasi array menunjukkan indeks terakhir dalam array; angka tersebut kurang dari jumlah elemen dalam array.
  • Ini menetapkan nilai ke setiap elemen dalam array. Elemen array diakses dengan menggunakan nama array dan menyertakan indeks elemen individual dalam tanda kurung.
  • Ini mencantumkan setiap nilai array. Contoh menggunakan For pernyataan untuk mengakses setiap elemen array dengan nomor indeksnya.

Array students dalam contoh sebelumnya adalah array satu dimensi karena menggunakan satu indeks. Array yang menggunakan lebih dari satu indeks atau subskrip disebut multidimensi. Untuk informasi selengkapnya, lihat artikel dan Dimensi Array lainnya di Visual Basic.

Membuat array

Anda dapat menentukan ukuran array dalam beberapa cara:

  • Anda dapat menentukan ukuran saat array dideklarasikan:

    ' Declare an array with 10 elements.
    Dim cargoWeights(9) As Double               
    ' Declare a 24 x 2 array.
    Dim hourlyTemperatures(23, 1) As Integer
    ' Declare a jagged array with 31 elements.
    Dim januaryInquiries(30)() As String
    
  • Anda dapat menggunakan New klausul untuk menyediakan ukuran array saat dibuat:

    ' Declare an array with 10 elements.
    Dim cargoWeights() As Double = New Double(9) {}
    ' Declare a 24 x 2 array.
    Dim hourlyTemperatures(,) As Integer = New Integer(23, 1) {}
    ' Declare a jagged array with 31 elements. 
    Dim januaryInquiries()() As String = New String(30)() {}
    

Jika Anda memiliki array yang sudah ada, Anda dapat menentukan ulang ukurannya dengan menggunakan ReDim pernyataan . Anda dapat menentukan bahwa ReDim pernyataan menyimpan nilai yang ada dalam array, atau Anda dapat menentukan bahwa pernyataan tersebut membuat array kosong. Contoh berikut menunjukkan berbagai penggunaan ReDim pernyataan untuk memodifikasi ukuran array yang ada.

' Assign a new array size and retain the current values.
ReDim Preserve cargoWeights(20)
' Assign a new array size and retain only the first five values.
ReDim Preserve cargoWeights(4)
' Assign a new array size and discard all current element values.
ReDim cargoWeights(15)

Untuk informasi selengkapnya, lihat Pernyataan ReDim.

Menyimpan nilai dalam array

Anda dapat mengakses setiap lokasi dalam array dengan menggunakan indeks jenis Integer. Anda dapat menyimpan dan mengambil nilai dalam array dengan mereferensikan setiap lokasi array dengan menggunakan indeksnya yang diapit tanda kurung. Indeks untuk array multidimensi dipisahkan oleh koma (,). Anda memerlukan satu indeks untuk setiap dimensi array.

Contoh berikut menunjukkan beberapa pernyataan yang menyimpan dan mengambil nilai dalam array.


Module Example
   Public Sub Main()
      ' Create a 10-element integer array.
      Dim numbers(9) As Integer
      Dim value As Integer = 2
        
      ' Write values to it.
      For ctr As Integer = 0 To 9
         numbers(ctr) = value
         value *= 2
      Next
        
      ' Read and sum the array values.  
      Dim sum As Integer
      For ctr As Integer = 0 To 9
         sum += numbers(ctr)
      Next
      Console.WriteLine($"The sum of the values is {sum:N0}")
    End Sub
End Module
' The example displays the following output:
'     The sum of the values is 2,046

Mengisi array dengan nilai array literal

Dengan menggunakan array literal, Anda dapat mengisi array dengan sekumpulan nilai awal pada saat yang sama saat Anda membuatnya. Array literal terdiri dari daftar nilai yang dipisahkan koma yang diapit kurung kurawal ({}).

Saat Anda membuat array dengan menggunakan array literal, Anda dapat menyediakan jenis array atau menggunakan inferensi jenis untuk menentukan jenis array. Contoh berikut menunjukkan kedua opsi.

' Array literals with explicit type definition.
Dim numbers = New Integer() {1, 2, 4, 8}
' Array literals with type inference.
Dim doubles = {1.5, 2, 9.9, 18}
' Array literals with explicit type definition.
Dim articles() As String = { "the", "a", "an" }

' Array literals with explicit widening type definition.
Dim values() As Double = { 1, 2, 3, 4, 5 }

Saat Anda menggunakan inferensi jenis, jenis array ditentukan oleh jenis dominan dalam daftar nilai literal. Jenis dominan adalah jenis yang dapat diperluas oleh semua jenis lain dalam array. Jika jenis unik ini tidak dapat ditentukan, jenis dominan adalah jenis unik yang dapat dipersempit oleh semua jenis lain dalam array. Jika tidak satu pun dari jenis unik ini dapat ditentukan, jenis dominannya adalah Object. Misalnya, jika daftar nilai yang disediakan ke array literal berisi nilai jenis Integer, , Longdan Double, array yang dihasilkan berjenis Double. Karena Integer dan Long melebar hanya ke Double, Double adalah jenis dominan. Untuk informasi selengkapnya, lihat Memperlebar dan Mempersempit Konversi.

Nota

Anda dapat menggunakan inferensi jenis hanya untuk array yang didefinisikan sebagai variabel lokal dalam anggota jenis. Jika definisi jenis eksplisit tidak ada, array yang didefinisikan dengan literal array pada tingkat kelas adalah tipe Object[]. Untuk informasi selengkapnya, lihat Inferensi jenis lokal.

Perhatikan bahwa contoh sebelumnya mendefinisikan values sebagai array jenis Double meskipun semua literal array berjenis Integer. Anda dapat membuat array ini karena nilai dalam array harfiah dapat melebar ke Double nilai.

Anda juga dapat membuat dan mengisi array multidimensi dengan menggunakan literal array bersarang. Literal array berlapis harus memiliki sejumlah dimensi yang konsisten dengan array yang dihasilkan. Contoh berikut membuat array bilangan bulat dua dimensi dengan menggunakan literal array berlapis.

' Create and populate a 2 x 2 array.
Dim grid1 = {{1, 2}, {3, 4}}
' Create and populate a 2 x 2 array with 3 elements.
Dim grid2(,) = {{1, 2}, {3, 4}, {5, 6}}

Saat menggunakan literal array berlapis untuk membuat dan mengisi array, kesalahan terjadi jika jumlah elemen dalam literal array berlapis tidak cocok. Kesalahan juga terjadi jika Anda secara eksplisit menyatakan variabel array memiliki jumlah dimensi yang berbeda dari literal array.

Sama seperti yang dapat Anda lakukan untuk array satu dimensi, Anda dapat mengandalkan inferensi jenis saat membuat array multidimensi dengan literal array bersarang. Jenis yang disimpulkan adalah jenis dominan untuk semua nilai dalam semua literal array di semua tingkat bersarang. Contoh berikut membuat array jenis Double[,] dua dimensi dari nilai berjenis Integer dan Double.

Dim arr = {{1, 2.0}, {3, 4}, {5, 6}, {7, 8}}

Untuk contoh tambahan, lihat Cara: Menginisialisasi Variabel Array di Visual Basic.

Melakukan iterasi melalui array

Saat Anda melakukan iterasi melalui array, Anda mengakses setiap elemen dalam array dari indeks terendah ke tertinggi atau dari tertinggi ke terendah. Biasanya, gunakan Untuk... Pernyataan Berikutnya atau Untuk Setiap... Pernyataan Berikutnya untuk melakukan iterasi melalui elemen array. Ketika Anda tidak tahu batas atas array, Anda dapat memanggil Array.GetUpperBound metode untuk mendapatkan nilai tertinggi indeks. Meskipun nilai indeks terendah hampir selalu 0, Anda dapat memanggil Array.GetLowerBound metode untuk mendapatkan nilai indeks terendah.

Contoh berikut melakukan iterasi melalui array satu dimensi dengan menggunakan For...Next instruksi.


Module IterateArray
   Public Sub Main()
      Dim numbers = {10, 20, 30}

      For index = 0 To numbers.GetUpperBound(0)
         Console.WriteLine(numbers(index))
      Next
   End Sub
End Module
' The example displays the following output:
'  10
'  20
'  30

Contoh berikut melakukan iterasi melalui array multidimensional dengan menggunakan For...Next statement. Metode GetUpperBound ini memiliki parameter yang menentukan dimensi. GetUpperBound(0) mengembalikan indeks tertinggi dimensi pertama, dan GetUpperBound(1) mengembalikan indeks tertinggi dimensi kedua.


Module IterateArray
   Public Sub Main()
      Dim numbers = {{1, 2}, {3, 4}, {5, 6}}

      For index0 = 0 To numbers.GetUpperBound(0)
         For index1 = 0 To numbers.GetUpperBound(1)
            Console.Write($"{numbers(index0, index1)} ")
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
' Output 
'  1 2 
'  3 4 
'  5 6

Contoh berikut menggunakan Pernyataan 'For Each...Next' untuk melakukan iterasi pada array satu dimensi dan array dua dimensi.


Module IterateWithForEach
   Public Sub Main()
      ' Declare and iterate through a one-dimensional array.
      Dim numbers1 = {10, 20, 30}
      
      For Each number In numbers1
         Console.WriteLine(number)
      Next
      Console.WriteLine()
      
      Dim numbers = {{1, 2}, {3, 4}, {5, 6}}

      For Each number In numbers
         Console.WriteLine(number)
      Next
   End Sub
End Module
' The example displays the following output:
'  10
'  20
'  30
'
'  1
'  2
'  3
'  4
'  5
'  6

Ukuran larik

Ukuran array adalah hasil perkalian dari panjang semua dimensinya. Ini menunjukkan jumlah total elemen yang saat ini terkandung dalam array. Misalnya, contoh berikut mendeklarasikan array 2 dimensi dengan empat elemen di setiap dimensi. Seperti yang ditunjukkan oleh output dari contoh, ukuran array adalah 16 (atau (3 + 1) * (3 + 1)).


Module Example
   Public Sub Main()
      Dim arr(3, 3) As Integer
      Console.WriteLine(arr.Length)     
   End Sub
End Module
' The example displays the following output:
'     16

Nota

Diskusi ukuran array ini tidak berlaku untuk array bergerigi. Untuk informasi tentang larik berjatahan dan menentukan ukuran larik berjatahan, lihat bagian Larik Berjatahan.

Anda dapat menemukan ukuran array dengan menggunakan Array.Length properti . Anda dapat menemukan panjang setiap dimensi array multidmensional dengan menggunakan metode .Array.GetLength

Anda dapat mengubah ukuran variabel array dengan menetapkan objek array baru ke variabel tersebut ReDim atau dengan menggunakan pernyataan . Contoh berikut menggunakan ReDim pernyataan untuk mengubah array 100 elemen menjadi array 51 elemen.


Module Example
   Public Sub Main()
      Dim arr(99) As Integer
      Console.WriteLine(arr.Length)
      
      Redim arr(50)
      Console.WriteLine(arr.Length)
   End Sub
End Module
' The example displays the following output:
'     100
'     51

 

Ada beberapa hal yang perlu diingat saat berhadapan dengan ukuran array.

Catatan
Dimensi Panjang Indeks setiap dimensi berbasis 0, yang berarti berkisar dari 0 hingga batas atasnya. Oleh karena itu, panjang dimensi tertentu adalah salah satu yang lebih besar dari batas atas yang dideklarasikan dari dimensi tersebut.
Batas Panjang Panjang setiap dimensi array terbatas pada nilai maksimum jenis Integer data, yaitu Int32.MaxValue atau (2 ^ 31) - 1. Namun, ukuran total array juga dibatasi oleh memori yang tersedia pada sistem Anda. Jika Anda mencoba menginisialisasi array yang melebihi jumlah memori yang tersedia, runtime akan melempar OutOfMemoryException.
Ukuran dan Ukuran Elemen Ukuran array tidak bergantung pada jenis data elemennya. Ukuran selalu mewakili jumlah total elemen, bukan jumlah byte yang mereka konsumsi dalam memori.
Konsumsi Memori Tidak aman untuk membuat asumsi apa pun mengenai bagaimana array disimpan dalam memori. Penyimpanan bervariasi pada platform dengan lebar data yang berbeda, sehingga array yang sama dapat menggunakan lebih banyak memori pada sistem 64-bit daripada pada sistem 32-bit. Bergantung pada konfigurasi sistem saat Anda menginisialisasi array, Common Language Runtime (CLR) dapat mengalokasikan penyimpanan baik untuk mengorganisasi elemen sedekat mungkin, atau untuk menyelaraskan semuanya pada batas alami perangkat keras. Selain itu, array memerlukan overhead penyimpanan untuk data kontrolnya, dan overhead ini meningkat dengan setiap dimensi tambahan.

Jenis array

Setiap array memiliki jenis data, yang berbeda dari jenis data elemennya. Tidak ada jenis data tunggal untuk semua array. Sebagai gantinya, jenis data array ditentukan oleh jumlah dimensi, atau peringkat, array, dan jenis data elemen dalam array. Dua variabel array adalah jenis data yang sama hanya ketika mereka memiliki peringkat yang sama dan elemennya memiliki jenis data yang sama. Panjang dimensi dari suatu array tidak memengaruhi jenis datanya.

Setiap array mewarisi dari System.Array kelas , dan Anda dapat mendeklarasikan variabel berjenis Array, tetapi Anda tidak dapat membuat array jenis Array. Misalnya, meskipun kode berikut menyatakan variabel arr sebagai berjenis Array dan memanggil metode Array.CreateInstance untuk menginisialisasi array, jenis array terbukti sebagai Object[].


Module Example
   Public Sub Main()
      Dim arr As Array = Array.CreateInstance(GetType(Object), 19)
      Console.WriteLine(arr.Length)
      Console.WriteLine(arr.GetType().Name)
   End Sub
End Module
' The example displays the following output:
'     19
'     Object[]

Selain itu, Pernyataan ReDim tidak dapat beroperasi pada variabel yang dideklarasikan sebagai jenis Array. Untuk alasan ini, dan untuk keamanan jenis, disarankan untuk mendeklarasikan setiap array sebagai jenis tertentu.

Anda dapat mengetahui jenis data array atau elemennya dalam beberapa cara.

  • Anda dapat memanggil GetType metode pada variabel untuk mendapatkan Type objek yang mewakili jenis run-time variabel. Objek Type menyimpan informasi yang luas dalam properti dan metodenya.
  • Anda dapat meneruskan variabel ke fungsi TypeName untuk mendapatkan String dengan nama tipe waktu-nyata.

Contoh berikut memanggil GetType metode dan TypeName fungsi untuk menentukan jenis array. Jenis array adalah Byte(,). Perhatikan bahwa properti Type.BaseType juga menunjukkan bahwa tipe dasar array byte adalah kelas Array.


Module Example
   Public Sub Main()
      Dim bytes(9,9) As Byte
      Console.WriteLine($"Type of {nameof(bytes)} array: {bytes.GetType().Name}")
      Console.WriteLine($"Base class of {nameof(bytes)}: {bytes.GetType().BaseType.Name}")
      Console.WriteLine()
      Console.WriteLine($"Type of {nameof(bytes)} array: {TypeName(bytes)}")
   End Sub
End Module
' The example displays the following output:
' Type of bytes array: Byte[,]
' Base class of bytes: Array
' 
' Type of bytes array: Byte(,)


Array sebagai nilai dan parameter yang dikembalikan

Untuk mengembalikan array dari prosedur Function, tetapkan jenis data array dan jumlah dimensi sebagai jenis pengembalian dari Pernyataan Fungsi. Dalam fungsi , deklarasikan variabel array lokal dengan jenis data dan jumlah dimensi yang sama. Dalam Pernyataan Pengembalian, sertakan variabel array lokal tanpa tanda kurung.

Untuk menentukan array sebagai parameter ke Sub atau Function prosedur, tentukan parameter sebagai array dengan jenis data dan jumlah dimensi yang ditentukan. Dalam panggilan ke prosedur, berikan variabel array dengan jenis data dan jumlah dimensi yang sama.

Dalam contoh berikut, GetNumbers adalah fungsi yang mengembalikan Integer(), sebuah array satu dimensi bertipe Integer. Prosedur ShowNumbers menerima Integer() argumen.


Module ReturnValuesAndParams
   Public Sub Main()
      Dim numbers As Integer() = GetNumbers()
      ShowNumbers(numbers)
   End Sub

   Private Function GetNumbers() As Integer()
      Dim numbers As Integer() = {10, 20, 30}
      Return numbers
   End Function

   Private Sub ShowNumbers(numbers As Integer())
      For index = 0 To numbers.GetUpperBound(0)
         Console.WriteLine($"{numbers(index)} ")
      Next
   End Sub
End Module
' The example displays the following output:
'   10
'   20
'   30
    

Dalam contoh berikut, fungsi GetNumbersMultiDim mengembalikan sebuah Integer(,), sebuah array dua dimensi berbentuk jenis Integer. Prosedur ShowNumbersMultiDim menerima Integer(,) argumen.


Module Example
   Public Sub Main()
      Dim numbers As Integer(,) = GetNumbersMultidim()
      ShowNumbersMultidim(numbers)
   End Sub

   Private Function GetNumbersMultidim() As Integer(,)
      Dim numbers As Integer(,) = {{1, 2}, {3, 4}, {5, 6}}
      Return numbers
   End Function

   Private Sub ShowNumbersMultidim(numbers As Integer(,))
      For index0 = 0 To numbers.GetUpperBound(0)
         For index1 = 0 To numbers.GetUpperBound(1)
            Console.Write($"{numbers(index0, index1)} ")
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'     1 2
'     3 4
'     5 6

Array Tidak Beraturan

Terkadang struktur data dalam aplikasi Anda bersifat dua dimensi tetapi tidak persegi panjang. Misalnya, Anda mungkin menggunakan array untuk menyimpan data tentang suhu tinggi setiap hari dalam sebulan. Dimensi pertama array mewakili bulan, tetapi dimensi kedua menunjukkan jumlah hari, dan jumlah hari dalam sebulan tidak seragam. Array tidak rata, yang juga disebut array dari array, dirancang untuk skenario seperti ini. Array bergerigi adalah array yang elemennya juga berupa array. Array bergerigi dan setiap elemen dalam array bergerigi dapat memiliki satu atau beberapa dimensi.

Contoh berikut menggunakan array bulan, di mana setiap elemen adalah sebuah array hari. Contohnya menggunakan array berjatahan karena bulan yang berbeda memiliki jumlah hari yang berbeda. Contoh menunjukkan cara membuat array berdimensi tidak rata, mengisi nilainya, dan mengambil serta menampilkannya.

Imports System.Globalization

Module JaggedArray
   Public Sub Main()
      ' Declare the jagged array of 12 elements. Each element is an array of Double.
      Dim sales(11)() As Double
      ' Set each element of the sales array to a Double array of the appropriate size.
      For month As Integer = 0 To 11
         ' The number of days in the month determines the appropriate size.
         Dim daysInMonth As Integer =
            DateTime.DaysInMonth(Year(Now), month + 1)
         sales(month) = New Double(daysInMonth - 1) {}
      Next 

      ' Store values in each element.
      For month As Integer = 0 To 11
         For dayOfMonth = 0 To sales(month).GetUpperBound(0)
            sales(month)(dayOfMonth) = (month * 100) + dayOfMonth
         Next
      Next

      ' Retrieve and display the array values.
      Dim monthNames = DateTimeFormatInfo.CurrentInfo.AbbreviatedMonthNames
      ' Display the month names.
      Console.Write("    ")
      For ctr = 0 To sales.GetUpperBound(0)
         Console.Write($" {monthNames(ctr)}   ")
      Next   
      Console.WriteLine()
      ' Display data for each day in each month.
      For dayInMonth = 0 To 30
         Console.Write($"{dayInMonth + 1,2}.  ")
         For monthNumber = 0 To sales.GetUpperBound(0)
            If dayInMonth > sales(monthNumber).GetUpperBound(0) Then 
               Console.Write("       ")
            Else
               Console.Write($"{sales(monthNumber)(dayInMonth),-5}  ")
            End If
         Next   
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'      Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct    Nov    Dec
'  1.  0      100    200    300    400    500    600    700    800    900    1000   1100
'  2.  1      101    201    301    401    501    601    701    801    901    1001   1101
'  3.  2      102    202    302    402    502    602    702    802    902    1002   1102
'  4.  3      103    203    303    403    503    603    703    803    903    1003   1103
'  5.  4      104    204    304    404    504    604    704    804    904    1004   1104
'  6.  5      105    205    305    405    505    605    705    805    905    1005   1105
'  7.  6      106    206    306    406    506    606    706    806    906    1006   1106
'  8.  7      107    207    307    407    507    607    707    807    907    1007   1107
'  9.  8      108    208    308    408    508    608    708    808    908    1008   1108
' 10.  9      109    209    309    409    509    609    709    809    909    1009   1109
' 11.  10     110    210    310    410    510    610    710    810    910    1010   1110
' 12.  11     111    211    311    411    511    611    711    811    911    1011   1111
' 13.  12     112    212    312    412    512    612    712    812    912    1012   1112
' 14.  13     113    213    313    413    513    613    713    813    913    1013   1113
' 15.  14     114    214    314    414    514    614    714    814    914    1014   1114
' 16.  15     115    215    315    415    515    615    715    815    915    1015   1115
' 17.  16     116    216    316    416    516    616    716    816    916    1016   1116
' 18.  17     117    217    317    417    517    617    717    817    917    1017   1117
' 19.  18     118    218    318    418    518    618    718    818    918    1018   1118
' 20.  19     119    219    319    419    519    619    719    819    919    1019   1119
' 21.  20     120    220    320    420    520    620    720    820    920    1020   1120
' 22.  21     121    221    321    421    521    621    721    821    921    1021   1121
' 23.  22     122    222    322    422    522    622    722    822    922    1022   1122
' 24.  23     123    223    323    423    523    623    723    823    923    1023   1123
' 25.  24     124    224    324    424    524    624    724    824    924    1024   1124
' 26.  25     125    225    325    425    525    625    725    825    925    1025   1125
' 27.  26     126    226    326    426    526    626    726    826    926    1026   1126
' 28.  27     127    227    327    427    527    627    727    827    927    1027   1127
' 29.  28            228    328    428    528    628    728    828    928    1028   1128
' 30.  29            229    329    429    529    629    729    829    929    1029   1129
' 31.  30            230           430           630    730           930           1130

Contoh sebelumnya menetapkan nilai ke array jagged berdasarkan elemen demi elemen dengan menggunakan perulangan For...Next . Anda juga dapat menetapkan nilai ke elemen array bergerigi dengan menggunakan literal array bersarang. Namun, upaya untuk menggunakan literal array berlapis (misalnya, Dim valuesjagged = {{1, 2}, {2, 3, 4}}) menghasilkan kesalahan kompilator BC30568. Untuk memperbaiki kesalahan, sertakan literal larik bagian dalam dalam tanda kurung. Tanda kurung memaksa ekspresi array literal dievaluasi, dan nilai yang dihasilkan digunakan dengan array literal luar, seperti yang ditunjukkan contoh berikut.


Module Example
   Public Sub Main()
      Dim values1d = { 1, 2, 3 }
      Dim values2d = {{1, 2}, {2, 3}, {3, 4}}
      Dim valuesjagged = {({1, 2}), ({2, 3, 4})}
   End Sub
End Module

Array bergerigi adalah array satu dimensi yang elemennya berisi array. Oleh karena itu, Array.Length metode dan Array.GetLength(0) properti mengembalikan jumlah elemen dalam array satu dimensi, dan Array.GetLength(1) melemparkan IndexOutOfRangeException karena array bergerigi tidak multidimensi. Anda menentukan jumlah elemen di setiap subarray dengan mengambil nilai setiap properti subarray Array.Length . Contoh berikut mengilustrasikan cara menentukan jumlah elemen dalam array bersusun.


Module Example
   Public Sub Main()
      Dim jagged = { ({1, 2}), ({2, 3, 4}), ({5, 6}), ({7, 8, 9, 10}) }
      Console.WriteLine($"The value of jagged.Length: {jagged.Length}.")
      Dim total = jagged.Length
      For ctr As Integer = 0 To jagged.GetUpperBound(0)
         Console.WriteLine($"Element {ctr + 1} has {jagged(ctr).Length} elements.") 
         total += jagged(ctr).Length 
      Next
      Console.WriteLine($"The total number of elements in the jagged array: {total}")
   End Sub
End Module
' The example displays the following output:
'     The value of jagged.Length: 4.
'     Element 1 has 2 elements.
'     Element 2 has 3 elements.
'     Element 3 has 2 elements.
'     Element 4 has 4 elements.
'     The total number of elements in the jagged array: 15

Array dengan panjang nol

Visual Basic membedakan antara array yang tidak diinisialisasi (array yang nilainya ) Nothingdan array nol panjang atau array kosong (array yang tidak memiliki elemen.) Array yang tidak diinisialisasi adalah array yang belum didimensikan atau memiliki nilai apa pun yang ditetapkan untuknya. Contohnya:

Dim arr() As String

Array dengan panjang nol dideklarasikan dengan dimensi -1. Contohnya:

Dim arrZ(-1) As String

Anda mungkin perlu membuat array dengan panjang nol dalam situasi berikut:

  • Tanpa mempertaruhkan NullReferenceException pengecualian, kode Anda harus mengakses anggota kelas Array, seperti Length atau Rank, atau memanggil fungsi Visual Basic seperti UBound.

  • Anda ingin menjaga kode Anda tetap sederhana dengan tidak perlu memeriksa Nothing sebagai pengecualian khusus.

  • Kode Anda berinteraksi dengan antarmuka pemrograman aplikasi (API) yang mengharuskan Anda meneruskan array panjang nol ke satu atau beberapa prosedur atau mengembalikan array panjang nol dari satu atau beberapa prosedur.

Memisahkan array

Dalam beberapa kasus, Anda mungkin perlu membagi satu array menjadi beberapa array. Ini melibatkan identifikasi titik atau titik di mana array akan dipisahkan, dan kemudian memecah array menjadi dua atau beberapa array yang terpisah.

Nota

Bagian ini tidak membahas pemisahan string tunggal menjadi array string berdasarkan beberapa pemisah. Untuk informasi tentang memisahkan string, lihat String.Split metode .

Kriteria yang paling umum untuk memisahkan array adalah:

  • Jumlah elemen dalam array. Misalnya, Anda mungkin ingin membagi array lebih dari jumlah elemen tertentu menjadi sejumlah bagian yang kira-kira sama. Untuk tujuan ini, Anda dapat menggunakan nilai yang dikembalikan oleh metode Array.Length atau Array.GetLength.

  • Nilai elemen, yang berfungsi sebagai pemisah yang menunjukkan di mana array harus dipisahkan. Anda dapat mencari nilai tertentu dengan memanggil Array.FindIndex metode dan Array.FindLastIndex .

Setelah Anda menentukan indeks atau indeks tempat array harus dipisahkan, Anda kemudian dapat membuat array individual dengan memanggil Array.Copy metode .

Contoh berikut membagi array menjadi dua array dengan ukuran yang kira-kira sama. (Jika jumlah total elemen array ganjil, array pertama memiliki satu elemen lebih banyak dari yang kedua.)


Module Example
   Public Sub Main()
      ' Create an array of 100 elements.
      Dim arr(99) As Integer
      ' Populate the array.
      Dim rnd As new Random()
      For ctr = 0 To arr.GetUpperBound(0)
         arr(ctr) = rnd.Next()
      Next
      
      ' Determine how many elements should be in each array.
      Dim divisor = 2
      Dim remainder As Integer
      Dim boundary = Math.DivRem(arr.GetLength(0), divisor, remainder)
            
      ' Copy the array.
      Dim arr1(boundary - 1 + remainder), arr2(boundary - 1) as Integer
      Array.Copy(arr, 0, arr1, 0, boundary + remainder)
      Array.Copy(arr, boundary + remainder, arr2, 0, arr.Length - boundary) 
   End Sub
End Module

Contoh berikut membagi array string menjadi dua array berdasarkan keberadaan elemen yang nilainya adalah "zzz", yang berfungsi sebagai pemisah array. Array baru tidak menyertakan elemen yang berisi pemisah.


Module Example
   Public Sub Main()
      Dim rnd As New Random()
      
      ' Create an array of 100 elements.
      Dim arr(99) As String
      ' Populate each element with an arbitrary ASCII character.
      For ctr = 0 To arr.GetUpperBound(0)
         arr(ctr) = ChrW(Rnd.Next(&h21, &h7F))
      Next
      ' Get a random number that will represent the point to insert the delimiter.
      arr(rnd.Next(0, arr.GetUpperBound(0))) = "zzz"

      ' Find the delimiter.
      Dim location = Array.FindIndex(arr, Function(x) x = "zzz")

      ' Create the arrays.
      Dim arr1(location - 1) As String
      Dim arr2(arr.GetUpperBound(0) - location - 1) As String
      
      ' Populate the two arrays.
      Array.Copy(arr, 0, arr1, 0, location)
      Array.Copy(arr, location + 1, arr2, 0, arr.GetUpperBound(0) - location)
   End Sub
End Module

Menggabungkan array

Anda juga dapat menggabungkan sejumlah array ke dalam satu array yang lebih besar. Untuk melakukan ini, Anda juga menggunakan metode Array.Copy.

Nota

Bagian ini tidak membahas menggabungkan array string ke dalam satu string. Untuk informasi tentang menggabungkan array string, lihat metode String.Join.

Sebelum menyalin elemen setiap array ke array baru, Anda harus terlebih dahulu memastikan bahwa Anda telah menginisialisasi array sehingga cukup besar untuk mengakomodasi array baru. Anda dapat melakukan ini dengan salah satu dari dua cara:

  • ReDim Preserve Gunakan pernyataan untuk memperluas array secara dinamis sebelum menambahkan elemen baru ke dalamnya. Ini adalah teknik term mudah, tetapi dapat mengakibatkan penurunan performa dan konsumsi memori yang berlebihan ketika Anda menyalin array besar.
  • Hitung jumlah total elemen yang diperlukan untuk array besar baru, lalu tambahkan elemen dari setiap array sumber ke dalamnya.

Contoh berikut menggunakan pendekatan kedua untuk menambahkan empat array dengan masing-masing sepuluh elemen ke satu array.

Imports System.Collections.Generic
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim tasks As New List(Of Task(Of Integer()))
      ' Generate four arrays.
      For ctr = 0 To 3
         Dim value = ctr
         tasks.Add(Task.Run(Function()
                               Dim arr(9) As Integer
                               For ndx = 0 To arr.GetUpperBound(0)
                                  arr(ndx) = value
                               Next
                               Return arr
                            End Function))   
       Next
       Task.WaitAll(tasks.ToArray())
       ' Compute the number of elements in all arrays.
       Dim elements = 0
       For Each task In tasks
          elements += task.Result.Length
       Next
       Dim newArray(elements - 1) As Integer
       Dim index = 0
       For Each task In tasks
          Dim n = task.Result.Length
          Array.Copy(task.Result, 0, newArray, index, n)
          index += n
       Next 
      Console.WriteLine($"The new array has {newArray.Length} elements.")
   End Sub
End Module
' The example displays the following output:
'     The new array has 40 elements.

Karena dalam hal ini array sumber semuanya kecil, kita juga dapat memperluas array secara dinamis saat kita menambahkan elemen dari setiap array baru ke dalamnya. Contoh berikut melakukan itu.

Imports System.Collections.Generic
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim tasks As New List(Of Task(Of Integer()))
      ' Generate four arrays.
      For ctr = 0 To 3
         Dim value = ctr
         tasks.Add(Task.Run(Function()
                               Dim arr(9) As Integer
                               For ndx = 0 To arr.GetUpperBound(0)
                                  arr(ndx) = value
                               Next
                               Return arr
                            End Function))   
       Next
       Task.WaitAll(tasks.ToArray())

       ' Dimension the target array and copy each element of each source array to it.
       Dim newArray() As Integer = {}
       ' Define the next position to copy to in newArray.
       Dim index = 0
       For Each task In tasks
          Dim n = Task.Result.Length
          ReDim Preserve newArray(newArray.GetUpperBound(0) + n)
          Array.Copy(task.Result, 0, newArray, index, n)
          index += n
       Next 
      Console.WriteLine($"The new array has {newArray.Length} elements.")
   End Sub
End Module
' The example displays the following output:
'     The new array has 40 elements.

Koleksi sebagai alternatif untuk array

Array paling berguna untuk membuat dan bekerja dengan jumlah tetap objek yang ditik dengan kuat. Koleksi menyediakan cara yang lebih fleksibel untuk bekerja dengan sekelompok objek. Tidak seperti array, yang mengharuskan Anda secara eksplisit mengubah ukuran array dengan ReDim Pernyataan, koleksi tumbuh dan menyusut secara dinamis saat kebutuhan aplikasi berubah.

Saat Anda menggunakan ReDim untuk mengubah array, Visual Basic membuat array baru dan merilis yang sebelumnya. Ini membutuhkan waktu eksekusi. Oleh karena itu, jika jumlah item sering berubah, atau Anda tidak dapat memprediksi jumlah maksimum item yang Anda butuhkan, Anda biasanya akan mendapatkan performa yang lebih baik dengan menggunakan struktur data koleksi.

Untuk beberapa koleksi, Anda dapat menetapkan kunci ke objek apa pun yang Anda masukkan ke dalam koleksi sehingga Anda dapat dengan cepat mengambil objek dengan menggunakan kunci.

Jika koleksi Anda hanya berisi elemen dari satu jenis data, Anda dapat menggunakan salah satu kelas di System.Collections.Generic namespace. Koleksi generik memberlakukan keamanan jenis sehingga tidak ada jenis data lain yang dapat ditambahkan ke dalamnya.

Untuk informasi selengkapnya tentang koleksi, lihat Koleksi.

Istilah Definisi
Dimensi Array di Visual Basic Menjelaskan peringkat dan dimensi dalam array.
Cara: Menginisialisasi Variabel Array di Visual Basic Menjelaskan cara mengisi array dengan nilai awal.
Cara: Mengurutkan Array di Visual Basic Memperlihatkan cara mengurutkan elemen array menurut abjad.
Cara: Menetapkan Satu Array ke Array Lain Menjelaskan aturan dan langkah-langkah untuk menetapkan array ke variabel array lain.
Memecahkan Masalah Array Membahas beberapa masalah umum yang muncul saat bekerja dengan array.

Lihat juga