注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

秒大刀 博客

好好学习 天天向上

 
 
 

日志

 
 
 
 

自然排序  

2011-10-28 13:56:07|  分类: 技术积累 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
    php中有个自然排序函数natsort,在字符串和数字混杂的环境下,其排序结果更符合人类对数字的使用习惯、更自然,固称为“自然排序”。

    如下的字符串列表是严格按照传统的字母表顺序的:
20string
2string
3string
st20ring
st2ring
st3ring
string2
string20
string3
    结果并未像人类直觉那样将数字较小的放在前面,字典序在数字字母混杂情况下变得杂乱无章。传统的严格字典序在可用性面前已经失效了。
    而“自然排序”后的结果为:
2string
3string
20string
st2ring
st3ring
st20ring
string2
string3
string20

    Windows API中相应的提供StrCmpLogicalW比较器,依此可以方便的实现自然排序。The function compares two Unicode strings. Digits in the strings are considered as numerical content rather than text. This test is not case-sensitive。但要非常注意一句Note:Behavior of this function, and therefore the results it returns, can change from release to release. It should not be used for canonical sorting applications。
    在Windows XP以后,资源管理器的文件名默认排序准则就调用了StrCmpLogicalW。
    C#中对的StrCmpLogicalW导入方法为:

       [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
       private static extern int StrCmpLogicalW(string psz1, string psz2);


    C++开源的自然排序算法也可以参考sourceforge上的natsort项目,或者sourcefrog(sourceforge的山寨版?)上的Natural Order String Comparison。当然扒开php的natsort源码看也是个不错的选择。

参考:

  评论这张
 
阅读(2083)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017