我想定义一个数组。
我的问题是 Dim x(999)或 Dim x(9999)会花费相同还是Dim x(9999)会浪费更多资源?
非常感谢!!
答案 0 :(得分:2)
自然地创建一个包含9999个元素的数组将使用比只有999的数组更多的内存。我怀疑这不是你的问题。也许你正在试图找到一种为动态数据量分配足够内存的方法?您可以使用ReDim语句在经典ASP(VBScript)中调整数组大小 - 一旦知道了真实大小,就可以执行此操作。
答案 1 :(得分:1)
数组在连续内存中分配。因此,10000个元素的数组将占用需要1000个元素的数组的10倍的内存。
您可以从小处着手,在需要时增加阵列。我过去曾使用过这种类创建可变长度列表类型。
Class List
Dim maItems
Dim mlCount
Public Sub Class_Initialize()
ReDim maItems(8)
mlCount = 0
End Sub
Public Function Add(Item)
If mlCount = UBound(maItems) ReDim Preserve maItems(mlCount * 2)
mlCount = mlCount + 1
maItems(mlCount) = Item
Add = mlCount
End Function
Public Property Get Item(Index)
If Index < 1 Or Index > mlCount Then Error.Raise 9, "List", "Subscript out of Range"
Item = maItems(Index)
End Property
Public Property Get Count()
Count = mlCount
End Property
End Class
答案 2 :(得分:0)
阵列那么大吗?
为什么不将它分配为动态,然后随着它的增长而扩展?
<%
Dim myDynArray()
ReDim myDynArray(1)
myDynArray(0) = "Albert Einstein"
myDynArray(1) = "Mother Teresa"
ReDim Preserve myDynArray(3)
myDynArray(2) = "Bill Gates"
myDynArray(3) = "Martin Luther King Jr."
For Each item In myDynArray
Response.Write(item & "<br />")
Next
%>
上面代码的输出是
Albert Einstein Mother Teresa Bill Gates Martin Luther King Jr.
答案 3 :(得分:0)
我在Anthony W Jones的代码中加了一点,所以它返回一个只有相关元素的正确大小的数组(ToArray())。
Class List
Dim maItems
Dim mlCount
Public Sub Class_Initialize()
ReDim maItems(8)
mlCount = 0
End Sub
Public Function Add(Item)
If mlCount = UBound(maItems) Then ReDim Preserve maItems(mlCount * 2)
maItems(mlCount) = Item
mlCount = mlCount + 1
Add = mlCount
End Function
Public Property Get ToArray()
ReDim Result(Params.Count-1)
Dim i
For i = 0 to Params.Count-1
Result(i) = Params.maItems(i)
Next
ToArray = Result
End Property
Public Property Get Item(Index)
If Index < 1 Or Index > mlCount Then Error.Raise 9, "List", "Subscript out of Range"
Item = maItems(Index)
End Property
Public Property Get Count()
Count = mlCount
End Property
End Class