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.
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. Angka6
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 arr
bertipe 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.
Topik terkait
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. |