ASP / VB:计算和排序数组值

时间:2016-09-03 09:04:52

标签: asp.net vbscript

我不熟悉使用asp和vb写作,并且我遇到了一个逻辑,我需要从Web表单中检索数据,计算条目数,然后按字母数字顺序排序。

我有一个带有多个文本框的webform,可以填写并提交,看起来有点像这样:(原谅电子表格,它只是一个视觉辅助)

enter image description here

我创建了一个包含这样的值的数组:

myArray = array(town, medal, record, sport)

我想计算和命令(一切字母数字)总奖牌,每个城镇赢得的每枚奖牌数量以及每个城镇设置的记录数量。

我的伪代码看起来有点像这样,希望我在逻辑方面走在正确的轨道上。我有点简短的主要领域是知道哪些陈述会好,哪些,特别是按字母数字顺序排列。

'this is the psuedocode for the total medals per town
tally = 0 'Set tally to 0
for myArray(town) 'For each town
    for myArray(medal) 'For each medal
        tally = tally + 1 'Add 1 to the total tally
        response.write(myArray(town) "has" tally "medals" & "<br>")
    next
next

'this is the pseudocode for the individual medals
for myArray(town) 'For each town
    for myArray(medal) 'For each medal
        goldTally = 0
        silverTally = 0
        bronzeTally = 0
        if medal = "G"
            goldTally = goldTally + 1
        elseif medal = "S"
            silverTally = silverTally + 1
        else medal = "B"
            bronzeTally = bronzeTally + 1
        response.write(myArray(town) "has:" goldTally "gold medals" &"<br>"
                                         silverTally "silver medals" &"<br>"
                                         bronzeTally "bronze medals" &"<br>" 
    next
next               

非常感谢大家给予的任何帮助。

1 个答案:

答案 0 :(得分:2)

用于计数/分组/分类的VBScript工具是Dictionary。一些用例:Set opsword listsplit file

可以使用ArrayList对简单数组进行排序。 [阵列与Arraylist],fancy sorting 7

对于表格数据,请使用已断开连接的recordset

内联演示:

Option Explicit

' simple sample data
Dim a : a = Split("b c a b b c a a b")

' use a dictionary for counting/grouping
Dim d : Set d = CreateObject("Scripting.Dictionary")
Dim e
For Each e In a
    d(e) = d(e) + 1
Next
WScript.Echo Join(d.Keys)
WScript.Echo Join(d.Items)

' use an ArrayList for sorting simple arrays
Dim l : Set l = CreateObject("System.Collections.ArrayList")
For Each e in a
    l.Add e
Next
l.Sort
WScript.Echo Join(l.ToArray())

' use a disconnected recordset for tabular data
Const adVarChar    = 200
Const adInteger    = 2
Const adClipString = 2
Dim r : Set r = CreateObject("ADODB.Recordset")
r.Fields.Append "k", adVarChar, 50
r.Fields.Append "n", adInteger
r.Open
For Each e In d.Keys
    r.AddNew
    r.Fields("k").value = e
    r.Fields("n").value = d(e)
    r.Update
Next
r.MoveFirst
Do Until r.EOF
   WScript.Echo r.Fields("k").value, r.Fields("n").value
   r.MoveNext
Loop
r.Sort = "k DESC"
WScript.Echo r.GetString(adClipString, , ", ", "; ", "null")

输出:

cscript 39305170.vbs
b c a
4 2 3
a a a b b b b c c
a 3
c, 2; b, 4; a, 3;

BTW:即使是伪代码语言,

for myArray(town) 'For each town

response.write(myArray(town) "has:" goldTally "gold medals" ...

不能同时工作。