Du kan lige få koden med en bubble-sort. Hvis der er mange data bør du nok overveje om en anden sorteringsalgoritme er på sin plads. Der går lidt CPU-kraft på at konvertere dictionary-data til et array, da det ikke er oplagt at sortere på et dictionary (kan sikkert lade sig gøre, men jeg har ikke lige eksperimenteret med dette).
StrSQL="SELECT TOP 25 ID, Spareparts FROM WarrantyClaims"
set dic = Server.CreateObject("Scripting.Dictionary")
RS.Open StrSQL,Conn,3,3
Do While Not RS.EOF
' split spareparts feltet
SP=RS.Fields("Spareparts")
If (SP<>"") Then
SP=SP&";-:-;-:-"
SPlist=SPlit(SP,";")
For F=lBound(splist) to uBound(splist)
ThisSP=Split(splist(F),":")
If ThisSP(0)<>"-" Then
if dic.Exists(ThisSP(0)) then
dic(ThisSP(0)) = clng(dic(ThisSP(0))) + clng(ThisSP(1))
else
call dic.Add(ThisSP(0), clng(ThisSP(1)))
end if
End If
Next
End If
RS.MoveNext
Loop
RS.Close
' dictionary to array
arr = array()
redim arr(dic.Count - 1)
i = 0
for each k in dic.keys
arr(i) = array(k, dic(k))
i = i + 1
next
response.write "data som array:<br>"
for each itm in arr
response.write itm(0) & " = " & itm(1) & "<br>"
next
' bubblesort array på værdien i faldende orden...
for outer = 0 to ubound(arr) - 1
for i = 0 to ubound(arr) - outer - 1
if arr(i)(1) < arr(i + 1)(1) then
tmp = arr(i)
arr(i) = arr(i + 1)
arr(i + 1) = tmp
end if
next
next
response.write "data som sorteret array:<br>"
for each itm in arr
response.write itm(0) & " = " & itm(1) & "<br>"
next
Hvis du ønsker at ændre sorteringsrækkefølgen ændrer du blot linjen:
if arr(i)(1) < arr(i + 1)(1) then
til
if arr(i)(1) > arr(i + 1)(1) then
Vil du sortere på varenummer ændrer du det blot til:
if arr(i)(1) < arr(i + 1)(1) then
til
if arr(i)(0) < arr(i + 1)(0) then