2009-01-14 205 views
17

我正在寻找一种排序字符串的算法,类似于在Windows资源管理器中排序文件(和文件夹)的方式。看来,当排序导致类似Windows资源管理器排序方法

name 1, name 2, name 10 

,而不是

name 1, name 10, name 2 

,你一个普通字符串比较得到的字符串数值都考虑在内。

我正要开始自己写这个,但想检查是否有人曾经这样做,并愿意分享一些代码或见解。我会这样做的方式是在比较它们之前将名称中的数字值加上前导零。这会导致类似于

name 00001, name 00010, name 00002 

当使用常规字符串排序时,会给我正确的结果。

任何想法?

+1

http://stackoverflow.com/questions/248603/natural-sort-order-in-c-sharp – 2014-02-12 11:23:41

回答

14

它被称为“自然排序”。 Jeff前段时间有一个pretty extensive blog entry,它描述了您可能会忽略的困难,并且链接到几个实现。

1

根据我的理解,Windows资源管理器根据第二个示例进行排序 - 它总是令我非常恼火,因为订购时出现1,10,2。这就是为什么大多数写入大量文件(如批量应用程序)的应用程序始终使用长度为0的固定长度文件名或其他。

你的解决方案应该可以工作,但是你需要小心数字在文件名中的位置,如果他们在最后,可能只使用你的方法。

6

Explorer使用API​​ StrCmpLogicalW()进行这种排序(称为'自然排序顺序')。

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

可以找到一个很好的解释here