dim ASP Array
答
当然,创建一个包含9999个元素的数组将比使用999的数组使用更多的内存。我怀疑这不是你的问题。也许你正在试图找出一种方法来为动态数据量分配足够的内存?您可以使用ReDim语句调整经典ASP(VBScript)中的数组大小 - 一旦知道了真实大小,就可以做到这一点。
答
数组分配在连续的内存中。因此,一个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
答
这是一个大数组吗?
为什么不分配它是动态的,然后扩大它的增长?上面的代码的
<%
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.
答
我一点地加入安东尼W¯¯琼斯的代码,所以它返回与只有相关元件的正确大小的阵列(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
我认为上述代码应改为: 昏暗maItems 昏暗mlCount 公用Sub Class_Initialize() 使用ReDim maItems(8) mlCount = 0 结束子 – PropellerHead 2009-09-23 12:05:11
@PropellerHead:好斑点。我现在大部分时间都花在C#上。 ;) – AnthonyWJones 2009-09-23 14:13:41