VBScript的编码挑战:拆分命令后排序阵列由字符串长度(VBScript Coding Chal

2019-07-04 16:45发布

我在VBScript代码为C的学生,需要一点点帮助。

我的代码如下执行拆分命令:

outputArray =分裂(描述,”“)

从现在说明在数组中的个别字,我想根据每个字的字符串长度的数组进行排序。

因此,举例来说,如果描述等于“这是一个描述的例子”我然后数组的值是[这是,一个,例如,,一,说明],是吗?

但我想诉诸阵列,使最长的话是第一次,即数组项都受到字符串长度排序。 因此,一些VBScript代码我看来以后不能弄清楚,数组是这样的:[描述,例如,这一点,是的,一]

如果有字符串长度的领带,次要排序是按字母顺序排列。

我将不胜感激一些这方面的帮助,从一个学生那里。 谢谢。

Answer 1:

如VBScript没有本机排序,它需要的朋友一点帮助。 在你的情况-因为你的更复杂的排序标准-朋友不应该是NET的ArrayList中,JScript中的排序或SORT.EXE( 这里介绍 ),但断开连接的ADO记录集:

  Const adInteger          =          3 ' 00000003
  Const adVarChar          =        200 ' 000000C8

  Dim sInp : sInp = "this is an example of a description"
  Dim aInp : aInp = Split(sInp)
  WScript.Echo "A:", Join(aInp)

  Dim oRS : Set oRS = CreateObject("ADODB.Recordset")
  oRS.Fields.Append "Word", adVarChar, 50
  oRS.Fields.Append "Length", adInteger
  oRS.Open
  Dim sWord
  For Each sWord In aInp
      oRS.AddNew
      oRS.Fields("Word").value = sWord
      oRS.Fields("Length").value = Len(sWord)
      oRS.UpDate
  Next
  oRS.Sort = "Length DESC, Word"

  Dim aTable : aTable = oRS.GetRows()
  ReDim aOut(UBound(aTable, 2))
  Dim i
  For i = 0 To UBound(aOut)
      aOut(i) = aTable(0, i)
  Next
  WScript.Echo "B:", Join(aOut)

输出:

A: this is an example of a description
B: description example this an is of a

对于后台启动这里 。

添加-对于ArrayList的爱好者:

连接记录应该是你的第一选择,如果数据在本质上是平板状(排序标准涉及的元件的一个以上的方面/属性)。

ArrayList的VBScript中的排序有利于只有简单的情况下,因为 - AFAIK - 你不能传递一个比较函数的排序方法。 请证明我错了!

如果你必须使用一个ArrayList对于更复杂的排序,考虑使用Schwartzian变换 :

  1. 准备定制临时数据,以减轻比较
  2. 分类
  3. 恢复原始数据

在代码:

  Const csSep = "|"
  Const cnMax = 100

  Dim sInp : sInp = "this is an example of a description"
  Dim aInp : aInp = Split(sInp)
  WScript.Echo "A:", Join(aInp)

  Dim oNAL : Set oNAL = CreateObject( "System.Collections.ArrayList" )
  Dim oSB  : Set oSB  = CreateObject( "System.Text.StringBuilder" )
  Dim sWord
  For Each sWord In aInp
      oSB.AppendFormat_3 "{0,4}{1}{2}", 100 - Len(sWord), csSep, sWord
      sWord = oSB.ToString()
      oSB.Length = 0
      oNAL.Add sWord
  Next
  oNAL.Sort

  ReDim aOut(oNAL.Count - 1)
  Dim i
  For i = 0 To UBound(aOut)
      aOut(i) = Split(oNAL(i), csSep)(1)
  Next
  WScript.Echo "B:", Join(aOut)

输出:

A: this is an example of a description
B: description example this an is of a


Answer 2:

这里是如何的长度和按字母顺序排序有帮助的链接

http://www.webknowhow.net/dir/ASP/FAQ/array_faq.html



文章来源: VBScript Coding Challenge: Sort Array by String Length after Split Command