0


我有一個使用二維數組Cart(3, 20)在會話中存儲用戶商店的購物車。
它存儲的數據是這樣的:計數購物車2d在asp-classic中的陣列項目

Cart(0,0) = Product_ID 
Cart(1,0) = Product_Name 
Cart(2,0) = Product_Price 
Cart(3,0) = Product_Qty 

我想算基礎上的product_id項目(我們有沒有重複的product_id) 我在這裏找到了一個功能:

Function UniqueEntryCount(SourceRange) 

    Dim MyDataset 
    Dim dic 
    Set dic=Server.CreateObject("Scripting.Dictionary") 

    MyDataset = SourceRange 

    For i = 1 To UBound(MyDataset, 2) 
    if not dic.Exists(MyDataset(0, i)) then dic.Add MyDataset(0, i), "" 
    Next 


    UniqueEntryCount = dic.Count 
    Set dic = Nothing 


End Function 

但有一個問題是依然存在,當我的購物車是空的,它顯示我1

如何解決呢?

+0

你說你 '發現' 這個代碼:我不會用它。它是你自己看到的有缺陷的,但它也只計算唯一的產品ID(我不知道這是你想要的)。所以:1次P.ID 42和3次P.ID 97將導致2的計數。 – AutomatedChaos 2012-08-10 09:59:08

+0

是啊我在這裏找到它在「stackoverflow」 – MAY3AM 2012-08-11 10:49:39

回答

0

單元化固定數組(Dim a(i,j))包含i * j個空元素;您的

if not dic.Exists(MyDataset(0, i)) then dic.Add MyDataset(0, i), "" 

將拾取並計數第一個空項目。證明代碼:

Dim afCart(3, 4) 
    Dim dicPID : Set dicPID = countPID00(afCart) 
    Dim aKeys : aKeys  = dicPID.Keys 
    Dim vKey : vKey  = aKeys(0) 
    WScript.Echo "A", dicPID.Count, TypeName(vKey) 
    Set dicPID = countPID(afCart) 
    WScript.Echo "B", dicPID.Count 

    afCart(0, 0) = "ignored" 
    afCart(0, 1) = 4711 
    afCart(0, 2) = 4712 
    afCart(0, 3) = 4711 
' afCart(0, 4) = "not initialized/Empty" 

    Set dicPID = countPID(afCart) 
    WScript.Echo "C" 
    For Each vKey In dicPID.Keys 
     WScript.Echo "", vKey, "=", dicPID(vKey) 
    Next 

Function countPID00(afCart) 
    Dim dicRVal : Set dicRVal = CreateObject("Scripting.Dictionary") 
    Dim MyDataset : MyDataset = afCart ' waste of ressources 
    Dim iRow 
    For iRow = 1 To UBound(MyDataset, 2) 
     If Not dicRVal.Exists(MyDataset(0, iRow)) Then 
     dicRVal(MyDataset(0, iRow)) = "" ' loss of info; will pick up Empty item 
     End If 
    Next 
    Set countPID00 = dicRVal 
End Function ' countPID00 

Function countPID(afCart) 
    Dim dicRVal : Set dicRVal = CreateObject("Scripting.Dictionary") 
    Dim iRow 
    For iRow = 1 To UBound(afCart, 2) 
     If Not IsEmpty(afCart(0, iRow)) Then 
     dicRVal(afCart(0, iRow)) = dicRVal(afCart(0, iRow)) + 1 
     End If 
    Next 
    Set countPID = dicRVal 
End Function ' countPID 

輸出:

A 1 Empty 
B 0 
C 
4711 = 2 
4712 = 1 
+0

我困惑,WScript.Echo ?! :-s – MAY3AM 2012-08-09 12:45:13