从经典ASP中删除数组中的元素

时间:2013-07-19 18:52:36

标签: asp-classic vbscript

以下列数组为例......

arr(0)(0) = 3
arr(0)(1) = name
arr(0)(2) = address
arr(1)(0) = 7
arr(1)(1) = name
arr(1)(2) = address
arr(2)(0) = 14
arr(2)(1) = name
arr(2)(2) = address

我需要从数组中删除中间元素(id = 7)。我知道我需要遍历数组并将每个不被删除的记录移动到一个新数组中。我试过这样......

Dim newArr,i
Redim newArr(Ubound(arr))

For i = 0 to Ubound(arr)
    If (CStr(arr(i)(0)) <> 7 ) Then
        newArr(i) = arr(i)
    End if
Next

调试时我可以看到if语句有效,所以我知道只复制了2个元素,但newArr在结尾处是空的。我错过了什么我是一个PHP编码器,它是经典asp的新手,而且我常常使用数组函数来使这种东西变得不必要。任何帮助赞赏。谢谢。

5 个答案:

答案 0 :(得分:6)

您可以试试Scripting.Dictionary而不是使用数组。

它更灵活,并且有Remove方法。

答案 1 :(得分:5)

您不需要新数组,只需重新分配项目并“裁剪”数组:

Const removalIndex = 1
For x=removalIndex To UBound(arr)-1
    arr(x) = arr(x + 1)
Next
ReDim Preserve arr(UBound(arr) - 1)

此代码将从主数组中删除索引1处的数组项。如果您事先不知道要删除的项目的索引,则可以通过数组上的简单循环轻松找到它。

答案 2 :(得分:4)

我建议使用Scripting.Dictionary并将其用作列表/集合,因为它允许插入和删除。见这里:Lists in VBScript

答案 3 :(得分:0)

我不知道明确的答案,但如果我在黑暗中猜测我会建议,因为数组是二维的,你可能必须明确地指代它吗?

Dim newArr,i
Redim newArr(Ubound(arr),3)

For i = 0 to Ubound(arr)
    If (CStr(arr(i)(0)) <> 7 ) Then
        newArr(i)(0) = arr(i)(0)
        newArr(i)(1) = arr(i)(1)
        newArr(i)(2) = arr(i)(2)
    End if
Next

答案 4 :(得分:0)

我看到一些VBScript语法问题。第一:

arr(0)(0) = 3  'ERROR: Subscript out of range
arr(0, 0) = 3  'CORRECT

下一步:

ReDim newArr(Ubound(arr))  'this is 1 dimensional array
newArr(0) = arr(0)         'this will NOT work
newArr(0) = arr(0, 0)      'this will work

最后:为什么转换为String,然后将其与Integer进行比较:

(CStr(arr(i)(0)) <> 7)