使用VB脚本进行自然排序

前端之家收集整理的这篇文章主要介绍了使用VB脚本进行自然排序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用自然排序对项目进行排序:

“Z1”,“Z3”,“Z2”,“Z20”,“Z10”

排序后,我期待以下订单:

“Z1”,“Z10”,“Z20”

当我尝试使用数组列表时,

  1. Set oAlist=CreateObject("System.Collections.ArrayList")
  2. oAlist.sort

我得到一个基于ASCII的排序结果:

Z1,Z10,Z2,Z20,Z3

请帮我看看如何使用vb脚本进行自然排序

理论上见 here(点击链接!).实用演示

记录:

  1. Option Explicit
  2.  
  3. Const adInteger = 3 ' 00000003
  4. Const adVarChar = 200 ' 000000C8
  5.  
  6. Dim sInp : sInp = "Z1,Z3,Z10"
  7. Dim aInp : aInp = Split(sInp,",")
  8. WScript.Echo "A:",Join(aInp)
  9.  
  10. Dim oRS : Set oRS = CreateObject("ADODB.Recordset")
  11. oRS.Fields.Append "Word",adVarChar,50
  12. oRS.Fields.Append "Length",adInteger
  13. oRS.Open
  14. Dim sWord
  15. For Each sWord In aInp
  16. oRS.AddNew
  17. oRS.Fields("Word").value = Left(sWord,1)
  18. oRS.Fields("Length").value = CInt(Mid(sWord,2))
  19. oRS.UpDate
  20. Next
  21. oRS.Sort = "Word,Length"
  22.  
  23. Dim aTable : aTable = oRS.GetRows()
  24. ReDim aOut(UBound(aTable,2))
  25. Dim i
  26. For i = 0 To UBound(aOut)
  27. aOut(i) = aTable(0,i) & aTable(1,i)
  28. Next
  29. WScript.Echo "B:",Join(aOut)

数组列表

  1. Option Explicit
  2.  
  3. Dim sInp : sInp = "Z1,E1,D3,C2,B20,A10"
  4. Dim aInp : aInp = Split(sInp,Join(aInp)
  5.  
  6. Dim oNAL : Set oNAL = CreateObject( "System.Collections.ArrayList" )
  7. Dim oSB : Set oSB = CreateObject( "System.Text.StringBuilder" )
  8. Dim sWord
  9. For Each sWord In aInp
  10. oSB.AppendFormat_2 "{0}{1,4}",Left(sWord,1),CInt(Mid(sWord,2))
  11. sWord = oSB.ToString()
  12. oSB.Length = 0
  13. oNAL.Add sWord
  14. Next
  15. oNAL.Sort
  16.  
  17. ReDim aOut(oNAL.Count - 1)
  18. Dim i
  19. For i = 0 To UBound(aOut)
  20. aOut(i) = Left(oNAL(i),1) & CInt(Mid(oNAL(i),2))
  21. Next
  22. WScript.Echo "B:",Join(aOut)

猜你在找的VB相关文章