ReDim
This keyword resizes an array. We specify the maximum number of elements we want the array to have. ReDim
then creates a new array of that size.
With ReDim
, we specify the last index we want the array size to have. In this way it is the same as a Dim
statement. ReDim
can shorten or lengthen an array.
Here we create an Integer array of 3 elements. We then expand the array and zero it out with ReDim
. We then shrink the array with ReDim
.
Module Module1 Sub Main() ' Create an array with 3 Integer elements. Dim x() As Integer = New Integer() {1, 2, 3} Console.WriteLine(String.Join(",", x)) ' Use ReDim to resize the array. ReDim x(5) Console.WriteLine(String.Join(",", x)) ' Use ReDim to shorten the array. ReDim x(2) Console.WriteLine(String.Join(",", x)) End Sub End Module1,2,3 0,0,0,0,0,0 0,0,0
Array.Resize
With Array.Resize
we can resize an array, but it is not zeroed out. In this way Array.Resize
is different than ReDim
.
Module Module1 Sub Main() Dim x() As Integer = New Integer() {1, 2, 3} ' This keeps the existing elements. Array.Resize(x, 6) Console.WriteLine(String.Join(",", x)) End Sub End Module1,2,3,0,0,0
ReDim
ReDim
and Array.Resize
do not do the exact same thing—Array.Resize
retains existing elements, but ReDim
clears everything. Still we can compare the performance.
ReDim
to resize the array to have 6 elements (it specifies 5 as the last index).Array.Resize
. It retains the existing elements, unlike ReDim
.ReDim
is faster than Array.Resize
. So if possible, ReDim
is a better option than Array.Resize
.Module Module1 Sub Main() Dim m As Integer = 10000000 Dim s1 As Stopwatch = Stopwatch.StartNew ' Version 1: use ReDim. For i As Integer = 0 To m - 1 Dim x() As Integer = New Integer() {1, 2, 3} ReDim x(5) If Not x.Length = 6 Then Return End If Next s1.Stop() Dim s2 As Stopwatch = Stopwatch.StartNew ' Version 2: use Array.Resize. For i As Integer = 0 To m - 1 Dim x() As Integer = New Integer() {1, 2, 3} Array.Resize(x, 6) If Not x.Length = 6 Then Return End If Next s2.Stop() Dim u As Integer = 1000000 Console.WriteLine(((s1.Elapsed.TotalMilliseconds * u) / m).ToString("0.00 ns")) Console.WriteLine(((s2.Elapsed.TotalMilliseconds * u) / m).ToString("0.00 ns")) End Sub End Module10.70 ns ReDim 70.40 ns Array.Resize
ReDim
allocates a new array in place of an existing array. All the elements of a ReDim
array are erased and set to their default.