Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
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. Angka6
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
, , Long
dan 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 ) Nothing
dan 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.
Topik terkait
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. |