动态增加数组大小

时间:2012-01-03 06:30:40

标签: asp-classic

我在ASP中有这个数组

CONST CARTPID = 0
CONST CARTPRICE = 1
CONST CARTPQUANTITY = 2
dim localCart(3,20)

我像这样

动态地向这个数组中添加项目
localCart(CARTPID,i) = productId
localCart(CARTPRICE,i) = productPrice
localCart(CARTPQUANTITY,i) = 1

问题是,在4个项目之后,我仍然可以添加项目,但UBound总是返回3.这导致我的条件失败。

我想在运行时增加此数组的大小,以便UBOUND可以返回最新值。

请让我知道我该怎么做。这是我的完整代码

'Define constants
 CONST CARTPID = 0
 CONST CARTPRICE = 1
 CONST CARTPQUANTITY = 2

 'Get the shopping cart.
 if not isArray(session("cart")) then
dim localCart(3,20)
 else
localCart = session("cart")
 end if

 'Get product information
 productID = trim(request.QueryString("productid"))
 productPrice = trim(request.QueryString("price"))

 'Add item to the cart

 if productID <> "" then
foundIt = false
for i = 0 to ubound(localCart)
    if localCart(CARTPID,i) = productId then
        localCart(CARTPQUANTITY,i) = localCart(CARTPQUANTITY,i)+1
        foundIt = true
        exit for
    end if
next
if not foundIt then
    for i = 0 to 20

        if localCart(CARTPID,i) = "" then
                            ***ReDim Preserve localCart(UBound(localCart, 1) + 1,20)***
            localCart(CARTPID,i) = productId
            localCart(CARTPRICE,i) = productPrice
            localCart(CARTPQUANTITY,i) = 1
            exit for
        end if
    next
end if
 end if

3 个答案:

答案 0 :(得分:5)

如果您在循环中动态添加项目,则需要使用Redim Preserve()语句。您需要使用Preserve部分,这样您就不会丢失任何现有数据。

否则,如果您使用数组数据然后将其重新设置为另一组数据,则只需Redim()语句

以下是使用Redim() / Redim Prevserve()声明的良好参考:http://classicasp.aspfaq.com/general/can-i-create-an-array-s-size-dynamically.html

答案 1 :(得分:1)

第一个维度的长度仅为3,而第二个维度为20.如果您想要第二个维度的UBound,请执行以下操作:

UBound(localCart, 2)

返回20.您应该能够将其与ReDim Preserve结合使用。

答案 2 :(得分:0)

我认为在每次添加新项目后使用当前UBound + 1重新编辑数组将使UBound最终为您提供最新值。

// New item addition code will go here
ReDim localCart(UBound(localCart, 1) + 1,20)

因此,每次添加新项目时,它都会使用新大小更新数组。