Windows资源管理器排序方法

Chr*_*man 19 sorting algorithm

我正在寻找一种算法来排序字符串,类似于在Windows资源管理器中排序文件(和文件夹)的方式.似乎在排序时会考虑字符串中的数值,这会产生类似的结果

name 1, name 2, name 10
Run Code Online (Sandbox Code Playgroud)

代替

name 1, name 10, name 2
Run Code Online (Sandbox Code Playgroud)

通过常规字符串比较得到的.

我本人即将开始写这篇文章,但是想要检查一下是否有人这样做过,并愿意分享一些代码或见解.我接近这个的方法是在比较之前将前导零添加到名称中的数值.这会产生类似的结果

name 00001, name 00010, name 00002
Run Code Online (Sandbox Code Playgroud)

当使用常规字符串排序进行排序时,会给出正确的结果.

有任何想法吗?

Mic*_*rdt 16

它被称为"自然排序".杰夫前一段时间有一篇非常广泛的博客文章,它描述了您可能忽略的困难,并且链接到多个实现.


Ste*_*fan 6

Explorer使用API StrCmpLogicalW()进行这种排序(称为"自然排序顺序").

您不需要编写自己的比较函数,只需使用已存在的函数.

这里可以找到一个很好的解释.