Vbscript ASP Classic如何更改由另一个数组(不是真正的二维数组)持有的数组的长度
我需要有一个2d数组,其中第二个数组的长度根据具体情况而变化。为此,我制作了一个数组,其中包含具有以下代码的其他数组:Vbscript ASP Classic如何更改由另一个数组(不是真正的二维数组)持有的数组的长度,vbscript,asp-classic,Vbscript,Asp Classic,我需要有一个2d数组,其中第二个数组的长度根据具体情况而变化。为此,我制作了一个数组,其中包含具有以下代码的其他数组: Dim timeline ReDim timeline(days) for reDate = beginDate to endDate timeline(DateDiff("d", beginDate, reDate)) = Array(0) next 我遇到的问题是,我无法更改timeline中包含的任何数组的大小,因为我这样做
Dim timeline
ReDim timeline(days)
for reDate = beginDate to endDate
timeline(DateDiff("d", beginDate, reDate)) = Array(0)
next
我遇到的问题是,我无法更改timeline中包含的任何数组的大小,因为我这样做时ReDim似乎不起作用。有人知道我会怎么做吗?试试下面的代码片段,使用
a
作为临时数组变量:
Dim timeline, a
ReDim timeline(days)
' initial fill the array
For reDate = beginDate to endDate
a = Array()
ReDim a(99)
timeline(DateDiff("d", beginDate, reDate)) = a
Next
' redim sub arrays
For reDate = beginDate to endDate
' assign subarray to a
a = timeline(DateDiff("d", beginDate, reDate))
' redim a
ReDim Preserve a(199)
' put changed array into root array
timeline(DateDiff("d", beginDate, reDate)) = a
Next
在这种情况下,每个子阵列先包含100个元素,再包含200个元素。没有代码/上下文的“不工作”和错误消息(“需要对象”)不是提问的最佳方式。第一是完全浪费时间;第二个可能表示您在不应该使用的地方使用了Set
(VBScript数组不是对象,因此代码中不应该有任何Set
)
这证明了@omegastripes指出的相同事实,但也暗示了可能存在的陷阱:
Option Explicit
Dim AoA : AoA = Split("s o m e|w o r d s|o f|d i f f e r e n t|l e n g t h", "|")
Dim i
For i = 0 To UBound(AoA)
AoA(i) = Split(AoA(i))
Next
WScript.Echo "----- test data:"
For i = 0 To UBound(AoA)
WScript.Echo Join(AoA(i), "")
Next
WScript.Echo "----- array assignment copies (For Each elem ... does not 'work'):"
Dim e
For Each e In AoA
e = "zap"
Next
For Each e In AoA
WScript.Echo Join(e, "")
Next
WScript.Echo "----- array assignment copies (change needs index access):"
For i = 0 To UBound(AoA)
e = AoA(i)
e(0) = UCase(e(0)) ' just changes the copy (e)
WScript.Echo Join(e, "")
AoA(i)(1) = UCase(AoA(i)(1)) ' access via indices changes org collection
WScript.Echo Join(AoA(i), "")
Next
WScript.Echo "----- replace whole subarrays (re-dimensioned dynamically):"
Dim n, m
For i = 0 To UBound(AoA)
e = AoA(i)
n = UBound(e)
ReDim Preserve e(n * 2 + 1)
For m = n + 1 To UBound(e)
e(m) = UCase(e(m - n - 1))
Next
AoA(i) = e ' replace whole element
WScript.Echo Join(AoA(i), "")
Next
输出:
cscript 37951664.vbs
----- test data:
some
words
of
different
length
----- array assignment copies (For Each elem ... does not 'work'):
some
words
of
different
length
----- array assignment copies:
Some
sOme
Words
wOrds
Of
oF
Different
dIfferent
Length
lEngth
----- replace whole subarrays:
sOmeSOME
wOrdsWORDS
oFOF
dIfferentDIFFERENT
lEngthLENGTH
不是每个子阵列都是a,所以我会有a的天拷贝,而不是唯一的天子阵列?分配给每个人后,我将如何调整他们的大小?我不确定这是否重要,因为当我试图检查它的时候,我在a上得到了一个需要的对象哈哈