0


Cart(3, 20)セッションでユーザーショップを保存するために 2次元配列を使用するショッピングカートがあります。
次のようなデータを格納します。

 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 つの問題が残っています。カートが空の場合、1 と表示されます。

どうすれば解決できますか?

4

1 に答える 1

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
于 2012-08-09T06:47:03.283 に答える