繁体   English   中英

Visual Basic中未知长度的数组

[英]Arrays of unknown length in Visual Basic

我有一段用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

有没有一种方法可以重现结果,而无需声明具有“固定”长度的数组? 我最终希望代码读取长度未知的数据列,并将其存储在长度相等或更小的数组中,以便可以更改。 这只是代码的一部分......如果有人可以帮助我,那就太棒了! :d

谢谢

不确定这是否是您正在寻找的:

    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.
Dim DynaStrings() As String
ReDim DynaStrings(10)
DynaStrings(0) = "String 0"
'Need more data space!
ReDim DynaStrings(100)
DynaStrings(50) = "String 50"

希望这可能有所帮助。

您可以使用ReDim Preserve调整阵列大小。 如果你只需要一个查看时间而不要在循环中使用它,那没关系。 但ReDim Preserve非常慢,因为它创建了一个全新的数组并将旧值复制到其中。 如果需要使用未知数量的数据集填充数组,请使用列表。 我做了一个小例子:

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

通过10000次迭代,ReDim解决方案的运行时间为32ms,列表解决方案即时就绪(0 ms)。 100000次迭代使用ReDim产生5487ms,使用列表产生1ms。

没有这样的东西,具有“动态”长度的数组。

但是,您可以封装一些逻辑,这些逻辑将在需要时调整数组大小(在某些语言中称为ResizeArray,在其他语言中称为List,或者在其他列表中称为List;我很抱歉,我不确切知道VB中的哪一个;如果是VB.NET然后使用“List”)。

您可以使用ArrayList 它是最接近动态阵列的。 还有其他集合,因此可能归结为您对数据的期望。 但是,您无法创建数组并在vb中动态更改其长度。 (好吧,没有效率:))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM