大佬教程收集整理的这篇文章主要介绍了不使用StrCmpLogicalW或shlwapi.dll以数字和字母顺序(如Windows资源管理器)对数组进行排序 – ASP.NET VB,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
请HelPPPPP!
这是导致错误的分拣机.
Public Class nvSorter Implements IComparer(Of String) Declare Unicode Function StrCmpLogicalW Lib "shlwapi.dll" ( _ ByVal s1 As String,_ ByVal s2 As String) As Int32 Public Function Compare(ByVal x As String,ByVal y As String) As Integer Implements System.Collections.Generic.IComparer(Of String).Compare Return StrCmpLogicalW(x,y) End Function End Class
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.object,ByVal e As System.EventArgs) Handles Button1.Click Dim Filenames() As String = new String() {"0","1","10","11","12","13","14","15","16","17","18","19","2","20","3","4","5","6","7","8","9"} Array.sort(Filenames,New Cus@R_489_10608@omparer) messageBox.Show(String.Join(",",Filenames)) End Sub End Class Public Class Cus@R_489_10608@omparer Implements IComparer(Of String) Private Position As Integer Private Order As Integer = 1 Public Sub New(Optional ByVal Ascending As Boolean = TruE) If Not Ascending Then Order = -1 End If End Sub Private Shared Function EmptyText(ByVal s As String) As Boolean Return String.Empty.Equals(s) End Function Public Function Compare(ByVal x As String,ByVal y As String) As Integer Implements System.Collections.Generic.IComparer(Of String).Compare Dim res1 As New List(Of String)(System.Text.RegularExpressions.Regex.Split(x,"(\d+)",System.Text.RegularExpressions.RegexOptions.IgnoreCasE)) Dim res2 As New List(Of String)(System.Text.RegularExpressions.Regex.Split(y,System.Text.RegularExpressions.RegexOptions.IgnoreCasE)) res1.RemoveAll(AddressOf EmptyText) res2.RemoveAll(AddressOf EmptyText) Position = 0 For Each xstr As String In res1 If res2.Count > Position Then If Not IsNumeric(xstr) AndAlso Not IsNumeric(res2(Position)) Then Dim intresult As Integer = String.Compare(xstr,res2(Position),TruE) If intresult <> 0 Then Return intresult * Order Else Position += 1 End If ElseIf IsNumeric(xstr) And Not IsNumeric(res2(Position)) Then Return -1 * Order ElseIf Not IsNumeric(xstr) And IsNumeric(res2(Position)) Then Return 1 * Order ElseIf IsNumeric(xstr) And IsNumeric(res2(Position)) Then Dim res As Integer = decimal.Compare(decimal.Parse(xstr),decimal.Parse(res2(Position))) If res = 0 Then Position += 1 Else Return res * Order End If End If Else Return -1 * Order End If Next Return 1 * Order End Function End Class
上述排序示例“0”,“1”,“10”,“11”,“12”,“13”,“14”,“15”,“16”,“17”,“18的结果“,”19“,”2“,”20“,”3“,”4“,”5“,”6“,”7“,”8“,”9“是:
以上是大佬教程为你收集整理的不使用StrCmpLogicalW或shlwapi.dll以数字和字母顺序(如Windows资源管理器)对数组进行排序 – ASP.NET VB全部内容,希望文章能够帮你解决不使用StrCmpLogicalW或shlwapi.dll以数字和字母顺序(如Windows资源管理器)对数组进行排序 – ASP.NET VB所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。