【发布时间】:2019-07-28 09:05:04
【问题描述】:
我正在尝试创建一个动态数组以供以后用于获取多个数值的中位数。我有以下内容:
Dim DaysArray(), i, val1, val2
Sub BuildArray
i = 0
...
While Not recordset.EOF
ReDim Preserve DaysArray(i)
DaysArray(i) = recordset(value)
i = i + 1
Wend
...
End Sub
Sub ShowArrayValue
...
Array.Sort(DaysArray)
If DaysArray.Length Mod 2 <> 0 Then
Response.Write DaysArray(DaysArray.GetUpperBound(0)\2)
Else
val1 = DaysArray(DaysArray.Length\2)
val2 = DaysArray((DaysArray.Length\2) - 1)
Response.Write (val1 + val2)\2
End If
...
End Sub
但是,在通过循环的第一次迭代中,我在 Array.Sort(DaysArray) 行上得到“需要对象:数组”?
【问题讨论】:
-
如果记录集是 ADODB 记录集,您也可以考虑使用
GetRows方法自动将数据返回为二维数组 -
这个例子毫无意义 -
recordset.value,在某处你缺少对字段的引用 -recordset("thefieldname").Value,假设这是一个ADODB.Recordset对象引用。 -
您显示的代码应该在 每次 迭代中引发该错误,b/c 在该代码中的任何一点都没有定义数组的实际大小。
Dim DaysArray()“定义”了一个数组没有大小并且永远不应该在任何地方使用(正如我所讨论的here)。如果你想要一个动态大小的 VBScript 数组:使用ReDim DaysArray(-1)定义一个空的动态数组,然后在你的循环中调整它的大小,例如像这样:ReDim Preserve DaysArray(UBound(DaysArray)+1)。请注意这种方法固有的性能问题。