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

6
以以下数组为例...
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,我习惯于使用数组函数,这样做就不必要了。感谢任何帮助。谢谢。

我知道scripting.dictionary,但是所涉及的数组在整个网站中都被广泛使用,而且目前我无法访问它。 - alan shaw
2
并不是一个解决方案,但是:这不是一个ASP问题。ASP只是脚本语言的容器,在你的情况下是VBscript。因此,你的问题是一个VBscript问题。这个知识可能会帮助你更成功地搜索谷歌。 - Jeff
5个回答

7

与使用数组不同,您可以尝试使用Scripting.Dictionary

它更加灵活,并且拥有多种方法,其中包括Remove方法。


很不幸,我无法访问数组的创建。这是一个非常大的网站,所以相关的数组被广泛使用。目前无法避免使用它。 - alan shaw

7

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

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

这段代码将从主数组中删除索引为1的数组项。如果您不预先知道要删除的项的索引,可以通过简单地循环遍历数组轻松找到它。


5

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


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

最后,为什么要将其转换为字符串并将其与一个整数进行比较:StringInteger
(CStr(arr(i)(0)) <> 7)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接