可以在VBScript中使用自定义方法对对象的数组列表进行排序吗?



首先-我使用的语言是VBScript,与Windows脚本主机一起使用。我真的没有选择改变它并使用其他东西。

此时,我从文件中读取了许多具有多个字段的记录。我想把它们按不同的顺序打印出来(首先,按字母顺序;第二,按位置分组,然后在位置内按字母顺序排序;等等)。记录存储在ArrayList中

如果我使用Visual Basic而不是VBScript,我知道我可以创建实现iComparer接口的类,然后当我想按顺序排序时,用相应类的对象调用ArrayList的Sort函数(第一次排序使用字母对象,第二次排序使用LocationThenAlphabetical对象,等等)

然而,我一直在疯狂地试图在VBScript中找到一种方法来做到这一点或任何类似的事情,我实际上可以使用的语言。我在谷歌上搜索了"VBScript"、"ArrayList"、"sort"、"custom sort"、"comparison"、"custom comparison"、"implements"、"interface"等无穷无尽的组合,但每当我发现与VBScript相关的结果时,它们不是关于如何进行自定义排序的,每当我发现与自定义排序相关的结果时,它们并不适用于VBScript,即使在我的搜索中明确指定了这一点。

如果可能的话,我宁愿用正确的方法做这件事。如果根本不可能在VBScript中进行自定义排序,我可以看到一个可能的解决方案,但它会增加很多复杂性,并使用比我认为自定义排序更多的内存。

考虑到你必须将System.Collections.IComparer传递给。sort方法,并且你不能在VBScript中创建。net对象,答案是否定的

关于变通。您可以使用JScript轻松地定制排序。即使限于WSH VBScript,您也可以实例化MSScriptControl.ScriptControl,将其语言设置为JScript,创建能够通过VBS接收文件到JS数组的所有必要数据的东西,然后使用function sortFunction(a, b){}作为比较器与arrayObj.sort( [sortFunction] )排序。

Set rs = CreateObject("ADODB.Recordset")
With rs
    .Fields.Append "SortKey", 201, 260 
    .Fields.Append "Txt", 201, 5000 
    .Open
    Do Until Inp.AtEndOfStream
        Lne = Inp.readline
        SortKey = Mid(Lne, Arg(3), Arg(4) - Arg(3))
        .AddNew
        .Fields("SortKey").value = SortKey
        .Fields("Txt").value = Lne
        .UpDate
    Loop
    If Arg(2) = "a" then SortColumn = "SortKey ASC"
    If Arg(2) = "d" then SortColumn = "SortKey DESC"
    .Sort = SortColumn
    Do While not .EOF
        Outp.writeline .Fields("Txt").Value
        .MoveNext
    Loop
End With

最新更新