Array pada Visual Basic

Array adalah sekumpulan nilai, yang nantinya disebut elemen, yang saling terkait satu sama lain. Misalnya, array dapat terdiri dari jumlah siswa di setiap kelas di sekolah dalam mata pelajaran bahasa; setiap elemen array adalah jumlah siswa dalam satu kelas. Demikian pula, array dapat berupa nilai siswa untuk kelas; jadi setiap elemen array adalah satu kelas.

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

  • Kita harus tahu pada waktu awal pembuatan design berapa banyak nilai yang harus kita tangani.
  • Menangani sejumlah besar nilai dengan cepat akan susah untuk ditangani. Hal ini pada gilirannya membuat aplikasi jauh lebih mungkin untuk memiliki bug yang berlebihan.
  • Sulit untuk dipertahankan. Setiap nilai baru yang kita tambahkan mengharuskan aplikasi dimodifikasi, dikompilasi ulang, dan dipindahkan.

Dengan menggunakan array, Anda dapat merujuk ke nilai terkait dengan nama yang sama, dan menggunakan angka yang disebut indeks atau subskrip untuk mengidentifikasi elemen individual berdasarkan posisinya dalam array. Indeks array diawali dari 0 hingga jumlah total elemen dikurangi satu dalam sebuah 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 mengulangi elemennya membebaskan Anda dari kebutuhan untuk mengetahui dengan tepat berapa banyak elemen yang terdapat didalamnya pada waktu pembuatan design.

Beberapa contoh singkat sebelum penjelasan lebih jauh:

' 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)() {}

Bentuk sederhana elemen array dalam array

Mari kita buat array bernama students untuk menyimpan jumlah siswa di setiap nilai di sekolah pada kelas tata bahasa. Indeks elemen memiliki rentang dari 0 hingga 6. Menggunakan array seperti ini lebih sederhana daripada mendeklarasikan tujuh variabel.

Ilustrasi berikut ini menunjukkan array students. Untuk setiap elemen di dalam array:

  • Indeks elemen mewakili nilai (indeks 0 mewakili elemen pertama).

  • Nilai yang terdapat dalam elemen mewakili jumlah siswa dalam nilai tersebut.

Diagram showing an array of the numbers of students

Contoh berikut berisi tentang cara pembuatan dan penggunaan array pada Visual Basic:


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

Contoh ini melakukan tiga hal:

  • Mendeklarasikan students array dengan tujuh elemen. Angka 6 dalam deklarasi array menunjukkan indeks terakhir dalam array; yaitu jumlah elemen dalam array dikurangi satu.
  • Ini akan menugaskan nilai ke setiap elemen dalam array. Elemen array diakses dengan menggunakan nama array dan indeks elemen individu dalam tanda kurung.
  • Ini mencantumkan setiap nilai array. Contoh penggunaan statement For untuk mengakses setiap elemen array dengan nomor indeksnya.

Array students pada 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 lainnya dan Dimensi Array 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 ketentuan tertentu untuk penyediaan 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 suatu statementReDim. Anda dapat menentukan bahwa statement ReDim menyimpan nilai yang ada dalam array, atau Anda dapat menentukan bahwa statement tersebut membuat sebuah array kosong. Contoh berikut menunjukkan penggunaan statement yang beragamReDim 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 lebih lanjut Lihat ReDim Statement.

Menyimpan nilai dalam array

Anda dapat mengakses setiap lokasi dalam array dengan menggunakan tipe indeks Integer. Anda dapat menyimpan dan mengambil nilai dalam array dengan mereferensikan setiap lokasi array dengan menggunakan indeksnya yang dilampirkan nilainya dalam 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 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 list nilai yang dipisahkan dengan koma yang diapit kurung kurawal ({}).

Ketika Anda membuat array dengan menggunakan array literal, Anda dapat menetapkan tipe array atau menggunakan tipe inferensi untuk menentukan tipe 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 tipe inferensi, tipe array ditentukan oleh tipe dominan dalam daftar nilai literal. Tipe dominan adalah tipe di mana semua tipe lain dalam array dapat melebar. Jika tipe unik ini tidak dapat ditentukan, tipe dominan adalah tipe unik yang dapat dipersempit oleh semua tipe lain dalam array. Jika tidak satu pun dari tipe unik ini dapat ditentukan, maka tipe dominannya adalah Object. Misalnya, jika daftar nilai yang disediakan ke array literal berisi tipe nilai Integer, Long, dan Double, array yang dihasilkan bertipe Double. Karena Integer dan Long melebar hanya ke Double, Double adalah tipe yang dominan. Untuk informasi selengkapnya, lihat Memperluas dan Mempersempit Konversi.

Catatan

Anda dapat menggunakan tipe inferensi hanya untuk array yang didefinisikan sebagai variabel lokal dalam satu tipe himpunan. Jika definisi tipe eksplisit tidak ada, array yang ditentukan dengan array literal pada tingkat kelas dalam satu tipeObject[]. Untuk informasi selengkapnya, lihat Local type inference.

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

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

' 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 array literal bersarang untuk membuat dan mengisi array, kesalahan terjadi jika jumlah elemen dalam array literal bersarang tidak cocok. Kesalahan juga terjadi jika Anda secara eksplisit menyatakan variabel array memiliki jumlah dimensi yang berbeda dari array literal.

Sama seperti yang Anda bisa lakukan untuk array satu dimensi, Anda dapat menggunakan tipe inferensi saat membuat array multidmensional dengan array literal bersarang. Tipe yang ditentukan adalah tipe dominan untuk semua nilai di semua array literal untuk semua level sarang. Contoh berikut pembuatan array tipe dua dimensi Double[,] dari nilai yang bertipeInteger dan Double.

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

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

Pengulangan melalui array

Ketika Anda melakukan iterasi melalui array, Anda mengakses setiap elemen dalam array dari indeks terendah ke yang tertinggi atau dari yang tertinggi ke yang terendah. Biasanya, gunakan Untuk... Statement Berikutnya atau Untuk Masing-masing... Statement Berikutnya untuk melakukan iterasi melalui elemen array. Ketika Anda tidak mengetahui batas atas array, Anda dapat menggunakan metode Array.GetUpperBound untuk mendapatkan nilai indeks tertinggi. Meskipun nilai indeks terendah selalu 0, Anda dapat menggunakan metode Array.GetLowerBound untuk mendapatkan nilai indeks terendah.

Contoh berikut melakukan iterasi melalui array multidimensi dengan menggunakan statement For...Next.


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 multidimensi dengan menggunakan statement For...Next. Metode GetUpperBound ini memiliki parameter yang menentukan dimensi. GetUpperBound(0) mengembalikan indeks tertinggi dari dimensi pertama, dan GetUpperBound(1) mengembalikan indeks tertinggi dari 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 Untuk Setiap... Statement Berikutnya untuk melakukan iterasi melalui 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 array

Ukuran array adalah produk dari panjang semua dimensinya. Ini mewakili jumlah total elemen yang saat ini terdapat di 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

Catatan

Pembahasan tentang ukuran array ini tidak berlaku untuk jagged array. Untuk informasi tentang jagged array dan menentukan ukuran jagged array, lihat bagian Jagged array.

Anda dapat mencari tahu ukuran array dengan Array.Length menggunakan properti. Anda dapat mencari tahu panjang setiap dimensi array multidimensi dengan menggunakan metode Array.GetLength.

Anda dapat mengubah ukuran variabel array dengan menugaskan objek array baru ke dalamnya atau dengan menggunakan ReDim Statement statement. Contoh berikut menggunakan ReDim pernyataan untuk mengubah array dengan 100 elemen menjadi array dengan 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 ketika berhadapan dengan ukuran array.

Catatan
Panjang Dimensi Indeks setiap dimensi berbasis 0, yang berarti rentang di mulai dari 0 hingga batas atasnya. Oleh karena itu, panjang dimensi tertentu adalah lebih besar plus satu dari batas atas yang dideklarasikan dimensi tersebut.
Panjang Batas Panjang setiap dimensi array terbatas pada nilai maksimum Integer tipe data, yaitu Int32.MaxValue atau (2 ^ 31) - 1. Namun, ukuran total array juga dibatasi oleh memori yang tersedia di dalam sistem Anda. Jika Anda mencoba menginisialisasi array yang melebihi jumlah memori yang tersedia, runtime akan melempar sebuah OutOfMemoryException.
Ukuran dan Ukuran Elemen Ukuran array tidak bergantung pada tipe data elemennya. Ukuran selalu mewakili jumlah total elemen, bukan jumlah bit yang dikonsumsi dalam memori.
Konsumsi Memori Tidak perlu membuat asumsi tentang bagaimana array disimpan dalam memori. Media 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. Menyesuaikan pada konfigurasi sistem saat Anda menginisialisasi array, common language runtime (CLR) dapat menugaskan penyimpanan baik untuk mengemas elemen sedekat mungkin, atau untuk menyelaraskan semuanya pada batas perangkat keras secara umum. Selain itu juga, array membutuhkan overhead penyimpanan untuk informasi kontrolnya, dan overhead ini meningkat dengan setiap dimensi yang ditambahkan.

Tipe array

Setiap array memiliki tipe data, yang berbeda dari tipe data elemennya. Tidak ada tipe data tunggal untuk semua array. Sebaliknya, tipe data array ditentukan oleh jumlah dimensi, atau peringkat, array, dan tipe data elemen dalam array. Dua variabel array memiliki tipe data yang sama hanya ketika mereka memiliki peringkat yang sama dan masing-masing elemen memiliki tipe data yang sama. Panjang dimensi array tidak mempengaruhi tipe data array.

Setiap array mewarisi dari kelas System.Array, dan Anda dapat mendeklarasikan variabel bertipe Array, tetapi Anda tidak dapat membuat array tipe Array. Misalnya, meskipun kode berikut mendeklarasikan variabel arrbertipe Array dan menggunakan metode Array.CreateInstance untuk membuat instance array, tipe array memperlihatkan 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, ReDim Statement tidak dapat beroperasi pada variabel yang dideklarasikan sebagai tipeArray. Untuk alasan ini, dan untuk keamanan tipe, disarankan untuk mendeklarasikan setiap array dengan tipe tertentu.

Anda dapat mengetahui tipe data dari array atau elemennya dalam beberapa cara.

  • Anda dapat menggunakan GetType metode pada variabel untuk mendapatkan Type objek yang mewakili tipe 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 run-time.

Contoh berikut menggunakan metode GetType dan fungsi TypeName untuk menentukan tipe array. Tipe array adalah Byte(,). Perhatikan bahwa properti Type.BaseType juga menunjukkan bahwa tipe dasar array bit 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, tentukan tipe data array dan jumlah dimensi sebagai tipe pengembalian Statement Fungsi. Dalam fungsi, deklarasikan variabel array lokal dengan tipe data dan jumlah dimensi yang sama. Dalam Statement Return, sertakan variabel array lokal tanpa tanda kurung.

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

Dalam contoh berikut, fungsi GetNumbers mengembalikan Integer(), array satu dimensi tipe 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 Integer(,), array satu dimensi tipe 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

Jagged array

Terkadang struktur data dalam aplikasi Anda adalah dua dimensi tetapi tidak berbentuk persegi panjang. Misalnya, Anda dapat menggunakan array untuk menyimpan data tentang suhu tinggi setiap hari dalam sebulan. Dimensi pertama array mewakili bulan, sedangkan dimensi kedua mewakili jumlah hari, dan jumlah hari dalam sebulan tidak seragam. Sebuah Jagged array, yang juga disebut array dari array, dirancang untuk skenario tersebut. Jagged array adalah array yang elemennya juga array. Jagged array dan setiap elemen dalam jagged array dapat memiliki satu atau lebih dimensi.

Contoh berikut menggunakan array bulan, masing-masing elemen yang merupakan array hari. Contoh menggunakan jagged array karena bulan yang berbeda memiliki jumlah hari yang berbeda. Contoh ini menunjukkan cara membuat jagged array, menugaskan nilai ke dalamnya, dan mengambil kemudian menampilkan nilai-nilainya.

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 menugaskan nilai ke jagged array berdasarkan elemen demi elemen dengan menggunakan perulangan For...Next. Anda juga dapat menugaskan nilai ke elemen jagged array dengan menggunakan array literal bersarang. Namun, upaya untuk menggunakan array literal bersarang (misalnya, Dim valuesjagged = {{1, 2}, {2, 3, 4}}) menghasilkan error compiler BC30568. Untuk memperbaiki error, lampirkan array literal dalam tanda kurung. Tanda kurung memaksa expression harfiah array dievaluasi, dan nilai yang dihasilkan digunakan dengan array literal luar, seperti yang ditunjukkan pada 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

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


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 kosong

Visual Basic membedakan antara array yang tidak diinisialisasi (array yang nilainya Nothing) dan array dengan panjang nol atau array kosong (array yang tidak memiliki elemen.) Array yang tidak diinisialisasi adalah array yang belum memiliki dimensi ataupun nilai yang ditugaskan. Contohnya:

Dim arr() As String

Array kosong dideklarasikan dengan dimensi -1. Contohnya:

Dim arrZ(-1) As String

Anda mungkin perlu membuat array kosong dalam keadaan berikut:

  • Tanpa kemungkinan pengecualian NullReferenceException, 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 harus memeriksa Nothing sebagai kasus khusus.

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

Memisahkan array

Dalam beberapa kasus, Anda mungkin perlu membagi satu array menjadi beberapa array. Ini melibatkan identifikasi titik di mana array harus dibagi, dan kemudian memisahkan array menjadi dua atau lebih array.

Catatan

Bagian ini tidak membahas pemisahan satu string menjadi array string berdasarkan beberapa pembatas. Untuk informasi tentang pemisahan string, lihat metode String.Split.

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 pembatas yang menunjukkan di mana array harus dibagi. Anda dapat mencari nilai tertentu dengan menggunakan metode Array.FindIndex dan Array.FindLastIndex.

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

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 pembatas.


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 menjadi satu array yang lebih besar. Untuk melakukan ini, Anda juga menggunakan metode Array.Copy.

Catatan

Bagian ini tidak membahas penggabungan array string menjadi satu string. Untuk informasi tentang penggabungan array string, lihat metode String.Join.

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

  • Gunakan statement ReDim Preserve untuk memperluas array secara dinamis sebelum menambahkan elemen baru ke dalamnya. Ini adalah teknik termudah, tetapi dapat mengakibatkan penurunan kinerja 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 sepuluh elemen masing-masing 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 secara dinamis memperluas array 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.

Collection sebagai alternatif array

Array paling berguna untuk membuat dan bekerja dengan sejumlah tetap dari tipe objek. Collection menyediakan cara yang lebih fleksibel untuk bekerja dengan kelompok objek. Tidak seperti array, yang mengharuskan Anda secara eksplisit mengubah ukuran array dengan ReDim Statement, collection tumbuh dan menyusut secara dinamis saat kebutuhan aplikasi berubah.

Saat Anda menggunakan ReDim untuk melakukan redimensi pada array, Visual Basic membuat array baru dan merilis array sebelumnya. Ini membutuhkan waktu eksekusi. Oleh karena itu, jika jumlah item yang sering Anda kerjakan mengalami perubahan, atau Anda tidak dapat memprediksi jumlah maksimum item yang Anda butuhkan, Anda biasanya akan mendapatkan kinerja yang lebih baik dengan menggunakan collection.

Untuk beberapa collection, Anda dapat menugaskan key ke objek apa pun yang Anda masukkan ke dalam collection sehingga Anda dapat dengan cepat mengambil objek dengan menggunakan key.

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

Untuk informasi lebih lanjut mengenai collection, lihat Collection.

Istilah Definisi
Dimensi Array dalam 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 Menunjukkan cara mengurutkan elemen array menurut abjad.
Cara: Menugaskan Satu Array ke Array Lain Menjelaskan aturan dan langkah-langkah untuk menugaskan array ke variabel array lain.
Masalah Umum Array Membahas beberapa masalah umum yang muncul ketika bekerja dengan array.

Lihat juga