自然排序法 代碼分享
vb.net吧
全部回复
仅看楼主
level 4
东云智树 楼主
是這樣的
因為VB.net裏面字帶的排序法都是 1,11,2,21,22,3,4,5
看起清單就是不舒服
所以想要像Win7的 1,2,3,4,5,11,21,22 來給檔案清單排序
今天研究了這東西半天才搞定
原代碼是C#來的
不廢話了給你們吧。
'使用方法:
Array.Sort(填入陣列, New NaturalStringComparer())
'下面要放在最外層
<Security.SuppressUnmanagedCodeSecurity()>
Friend Module SafeNativeMethods
Public Declare Unicode Function StrCmpLogicalW Lib "shlwapi.dll" (ByVal psz1 As String, ByVal psz2 As String) As Integer
Public Class NaturalStringComparer
Implements IComparer(Of String)
Public Function Compare(ByVal a As String, ByVal b As String) As Integer Implements System.Collections.Generic.IComparer(Of String).Compare
Return SafeNativeMethods.StrCmpLogicalW(a, b)
End Function
End Class
End Module
以上
要是有大神能改成List(Of T)也能用的話我會很感激的[乖]
2018年01月19日 14点01分 1
level 4
东云智树 楼主
2018年01月19日 14点01分 2
level 11
一样的,直接把比较器套进去就可以了,不过日常使用只有string才需要这样干吧,其他引用类型好像是建议重写类内部的compare函数,值类型直接用不带参数的重载就可以了。
我这刚测试的代码,可以实现类似的功能,但是咱不谈性能,因为现在还没有那本事。。。[哈哈]
2018年01月19日 17点01分 4
因為自己做了看O圖的東西 但是下載下來的圖片自動排序只有1231011無奈 圖片又大量的手動命名不完就[啊] 我會試試的 謝大神[乖]
2018年01月20日 03点01分
@东云智树 O圖?是个啥?你是港澳台同胞?
2018年01月20日 07点01分
@闪星2 窩是彎彎人喔[乖]
2018年01月20日 13点01分
@东云智树 拜见女装大佬???
2018年01月20日 13点01分
level 7
用areay和list都支持comparsion<T>或者icomparable<T>排序,转化成数字对比
2018年01月20日 05点01分 5
我試試[真棒]
2018年01月21日 01点01分
level 10
排序只需要直接调用这个API就可以了
files 会是排序之后的顺序
2018年01月22日 12点01分 6
直接這樣打好像不能用呢[乖] 後面改成 Function(x,y) StrCmpLogicalW(x,y) 就能用了
2018年01月24日 08点01分
感謝大神指導[大拇指]
2018年01月24日 08点01分
1