如何使用vbscript对数组进行排序?

Osk*_*kar 28 sorting vbscript

问题说这一切都真的,但......

我正在扫描一个文件,寻找与某个正则表达式模式匹配的行,然后我想打印出符合但按字母顺序排列的行.我确定这是微不足道的,但vbscript不是我的背景

我的数组定义为

Dim lines(10000)
Run Code Online (Sandbox Code Playgroud)

如果这有任何区别,我正在尝试从正常的cmd提示符执行我的脚本

谢谢

Osk*_*kar 41

来自微软

在VBScript中对数组进行排序从未如此简单; 那是因为VBScript没有任何类型的排序命令.反过来,这总是意味着VBScript脚本编写者被迫编写自己的排序例程,可以是冒泡排序例程,堆排序,快速排序或其他类型的排序算法.

所以(使用.Net,因为它安装在我的电脑上):

Set outputLines = CreateObject("System.Collections.ArrayList")

'add lines
outputLines.Add output
outputLines.Add output

outputLines.Sort()
For Each outputLine in outputLines
    stdout.WriteLine outputLine
Next
Run Code Online (Sandbox Code Playgroud)

  • 很酷!工作完美。一个有用的细节:如果您想要降序排列,请使用outputLines.Reverse()。(https://msdn.microsoft.com/en-us/library/d0td77tk%28v=vs.110%29.aspx) (2认同)

小智 18

我知道这是一个非常古老的话题,但它可能会在将来为任何人派上用场.下面的脚本完成了家伙试图纯粹使用vbscript实现的目标.当以大写字母开头的排序条款具有优先权时.

for a = UBound(ArrayOfTerms) - 1 To 0 Step -1
    for j= 0 to a
        if ArrayOfTerms(j)>ArrayOfTerms(j+1) then
            temp=ArrayOfTerms(j+1)
            ArrayOfTerms(j+1)=ArrayOfTerms(j)
            ArrayOfTerms(j)=temp
        end if
    next
next 
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这种"泡泡"排序,我在我的代码中使用它.优点是体积小且易于调试,但需要O(N ^ 2)时间,因此如果阵列很大,可能需要几秒钟.我几乎从来没有一个大阵列,所以没关系. (3认同)

Fio*_*ala 10

断开连接的记录集可能很有​​用.

Const adVarChar = 200  'the SQL datatype is varchar

'Create a disconnected recordset
Set rs = CreateObject("ADODB.RECORDSET")
rs.Fields.append "SortField", adVarChar, 25

rs.CursorType = adOpenStatic
rs.Open
rs.AddNew "SortField", "Some data"
rs.Update
rs.AddNew "SortField", "All data"
rs.Update

rs.Sort = "SortField"

rs.MoveFirst

Do Until rs.EOF
    strList=strList & vbCrLf & rs.Fields("SortField")        
    rs.MoveNext
Loop 

MsgBox strList
Run Code Online (Sandbox Code Playgroud)

  • 这在对对象集合进行排序时非常有用!它可能不像公认的答案那么直接,但它绝对更灵活! (2认同)