Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Arrays of unknown length in Visual Basic

Tags:

arrays

vb.net

I have a piece of code written in Visual Basic:

Dim n As Double, i As Integer
n = 4
Dim Ramp_length(1 To 4) As Double
For i = 1 To n
    Ramp_length(i) = Cells(13 + i, 5)
    'Cells(65 + i, 7) = Ramp_length(i)'
Next i

Is there a way I can reproduce the result without declaring the array with a "fixed" length? I eventually want the code to read off a column of data with unknown length and store it in an array of equal or smaller length so it can be altered. This is just a piece of the code...if someone could help me out that would be great! :D

Thanks

like image 325
BHurst Avatar asked Jan 15 '10 00:01

BHurst


3 Answers

You can use ReDim Preserve to resize an array. If you only need it a view times and don't use it in a loop, it's ok. But ReDim Preserve is very slow, because it creates a completely new array and copies the old values into it. If you need to fill an array up with an unknown amount of data sets, use a list. I made a small example:

Dim num_iterations as Integer

' redim solution
Dim dyn_array As Integer()
For i = 0 To num_iterations - 1
    ReDim Preserve dyn_array(i)
    dyn_array(i) = i
Next

' list solution
Dim list_for_array As New List(Of Integer)
For i = 0 To num_iterations - 1
    list_for_array.Add(i)
Next
Dim list_array As Integer() = list_for_array.ToArray

With 10000 iterations the ReDim-solution has a runtime of 32ms, the list solution is instantly ready (0 ms). 100000 iterations result in 5487ms using ReDim and 1ms using a list.

like image 142
scotty86 Avatar answered Oct 23 '22 05:10

scotty86


Not sure if this is what you're looking for:

    Dim n As Double = 44
    Dim Ramp_Length_List As New List(Of Double)
    For i As Integer = 1 To n
        Ramp_Length_List.Add(Your_Temp_Double)
    Next i

    Dim Ramp_Length(Ramp_Length_List.Count - 1) As Double
    For i As Integer = 0 To Ramp_Length_List.Count - 1
        Ramp_Length(i) = Ramp_Length_List(i)
    Next
    Ramp_Length_List = Nothing
    'Ramp_Length() as Double is now sort of dynamic.
like image 24
SteveGSD Avatar answered Oct 23 '22 05:10

SteveGSD


Dim DynaStrings() As String
ReDim DynaStrings(10)
DynaStrings(0) = "String 0"
'Need more data space!
ReDim DynaStrings(100)
DynaStrings(50) = "String 50"

Hope this might help.

like image 37
sinoj Avatar answered Oct 23 '22 04:10

sinoj