繁体   English   中英

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

[英]delete an element from an array in classic ASP

给出以下数组作为示例...

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而不是使用数组。

它更灵活,并且具有删除方法等。

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

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

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

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

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

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

我看到一些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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM