Visual Basic .NET/Arrays
Simple arrays
editAn array is simply a variable that can store more than one piece of data. The data is stored in a list. If you declare an integer, then that variable can only store one integer. An array of integers can store many integers. Each one is given its own number.
For example, this line of code:
Dim MyArray(5) As Integer
will give an array like this
Index | Data |
00 | Nothing |
01 | Nothing |
02 | Nothing |
03 | Nothing |
04 | Nothing |
05 | Nothing |
Dim arrayName(upperBound) As arrayType
This is similar to declaring a normal variable with one difference, the upperBound argument. Unlike previous versions versions of Visual Basic, all arrays in Visual Basic .NET start at 0 and go to the upperBound, for Example:
Dim MyArray(10) As Integer
will declare a variable called MyArray with space for 11 Integers. The integers are stored in MyArray(0), MyArray(1),..., MyArray(10).
To declare an array and assign values in a single line, use the following
Dim MyArray() As Integer = New Integer(4) { 1, 2, 3, 4, 5 }
Another way to create an array is as follows
Module Module1
Sub Main()
Dim MyArray As System.Array
MyArray = System.Array.CreateInstance(GetType(String), 4)
MyArray(0) = "a"
MyArray(1) = "b"
MyArray(2) = "c"
MyArray(3) = "d"
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
End Module
Note that anytime these lines are used:
Dim MyArray As System.Array
MyArray = System.Array.CreateInstance(GetType(String), 4)
This means the same thing, and is easier to use:
MyArray = System.Array.CreateInstance(GetType(String), 4)
The (number) after the name of the variable declares it as a string.
To access one of the elements in the array:
Module Module1
Sub Main()
Dim MyArray As System.Array
MyArray = System.Array.CreateInstance(GetType(String), 4)
MyArray(0) = "a"
MyArray(1) = "b"
MyArray(2) = "c"
MyArray(3) = "d"
Console.WriteLine(MyArray.GetValue(2)) 'returns c
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
End Module
How many elements do we have in the array?
Module Module1
Sub Main()
'
Dim MyArray As System.Array
MyArray = System.Array.CreateInstance(GetType(String), 4)
MyArray(0) = "a"
MyArray(1) = "b"
MyArray(2) = "c"
MyArray(3) = "d"
Console.WriteLine(MyArray.Length)
'displays 4
Console.WriteLine("Press enter to continue")
Console.ReadLine()
'
End Sub
End Module
Display all the elements in the array.
Module Module1
Sub Main()
'
Dim MyArray As System.Array
Dim En As System.Collections.IEnumerator
MyArray = System.Array.CreateInstance(GetType(String), 4)
'
MyArray(0) = "a"
MyArray(1) = "d"
MyArray(2) = "b"
MyArray(3) = "c"
En = MyArray.GetEnumerator
'
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
'
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
End Module
Sort the array.
Module Module1
Sub Main()
'
Dim MyArray As System.Array
Dim En As System.Collections.IEnumerator
MyArray = System.Array.CreateInstance(GetType(String), 4)
'
MyArray(0) = "a"
MyArray(1) = "d"
MyArray(2) = "b"
MyArray(3) = "c"
En = MyArray.GetEnumerator
Console.WriteLine("Before sorting")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Sort(MyArray)
En = MyArray.GetEnumerator
Console.WriteLine("After sorting")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
'
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
End Module
Sort in descending order.
Module Module1
Sub Main()
'
Dim MyArray As System.Array
Dim En As System.Collections.IEnumerator
Dim DescSortCompare = New DescSortCompareClass
MyArray = System.Array.CreateInstance(GetType(String), 4)
'
MyArray(0) = "a"
MyArray(1) = "d"
MyArray(2) = "b"
MyArray(3) = "c"
En = MyArray.GetEnumerator
Console.WriteLine("Before descending sort")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Sort(MyArray, DescSortCompare)
En = MyArray.GetEnumerator
Console.WriteLine("After descending sort")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
'
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
'
Public Class DescSortCompareClass
Implements IComparer
'
Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements IComparer.Compare
Return x > y
End Function
'
End Class
End Module
Reverse the array.
Module Module1
Sub Main()
'
Dim MyArray As System.Array
Dim En As System.Collections.IEnumerator
MyArray = System.Array.CreateInstance(GetType(String), 4)
'
MyArray(0) = "a"
MyArray(1) = "d"
MyArray(2) = "b"
MyArray(3) = "c"
En = MyArray.GetEnumerator
Console.WriteLine("Before reversing the array")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Reverse(MyArray)
En = MyArray.GetEnumerator
Console.WriteLine("After reversing the array")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
'
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
'
End Module
Now that we have Reverse
, here is another way to sort in descending order without IComparer
.
Module Module1
Sub Main()
'
Dim MyArray As System.Array
Dim En As System.Collections.IEnumerator
MyArray = System.Array.CreateInstance(GetType(String), 4)
'
MyArray(0) = "a"
MyArray(1) = "d"
MyArray(2) = "b"
MyArray(3) = "c"
'
En = MyArray.GetEnumerator
Console.WriteLine("Before descending sort")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Sort(MyArray)
Array.Reverse(MyArray)
En = MyArray.GetEnumerator
Console.WriteLine("After descending sort")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
'
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
End Module
With Option Strict On, we would need to use SetValue to assign array elements.
Option Strict On
Module Module1
Sub Main()
'
Dim MyArray As System.Array
Dim En As System.Collections.IEnumerator
MyArray = System.Array.CreateInstance(GetType(String), 4)
'
MyArray.SetValue("a", 0)
MyArray.SetValue("d", 1)
MyArray.SetValue("b", 2)
MyArray.SetValue("c", 3)
'
En = MyArray.GetEnumerator
Console.WriteLine("Before descending sort")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Sort(MyArray)
Array.Reverse(MyArray)
En = MyArray.GetEnumerator
Console.WriteLine("After descending sort")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
'
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
End Module
Multi-Dimensional arrays
editArrays also can be multi-dimensional - 2D, 3D, 4D etc. For example, this line of code:
'Declare an 2D Array with integers(X, Y)
Dim My2DArray(2, 2) As Integer
Will give an array like this:
Index | Data |
0, 0 | Nothing |
0, 1 | Nothing |
0, 2 | Nothing |
1, 0 | Nothing |
1, 1 | Nothing |
1, 2 | Nothing |
2, 0 | Nothing |
2, 1 | Nothing |
2, 2 | Nothing |
2D arrays can be used in games like a Tic-Tac-Toe.
3D arrays can be thought of as an array of 2D arrays. Where a 2D array has rows and columns, as in a game of Tic Tac Toe, the 3D array stores multiple grids of Tic Tac Toe.
To declare a 3D array:
'Declare an 3D Array of integers(X, Y)
Dim My3DArray(1, 2, 2) As Integer
In this example, the first dimension would typically be the number of arrays in this 3D array. We know these are 2D arrays as the second dimension specifies how many rows in these arrays and the third dimension the number of columns.
Arrays manipulations methods
editSplit()
: to transform a string into an array, according to the separator which is placed in parameter.Join()
: to convert an array into a string.Filter()
: to filter some array entries.
Example:
Module Module1
Sub Main()
Dim ArrayName() As String = Split("lorem ipsum dolor sit", " ")
Console.WriteLine(ArrayName(1)) ' displays "ipsum"
ArrayName(4) = "amet"
Dim ArrayContent As String = String.Join(" ", ArrayName)
Console.WriteLine(ArrayContent)
Dim SubArray = Filter(ArrayName, "o", True, CompareMethod.Text)
Console.WriteLine(String.Join(" ", SubArray)) ' displays the words including "o"
Console.ReadLine()
End Sub
End Module