石鑫华视觉论坛微信公众号:石鑫华视觉

 找回密码
 注册会员
查看: 2194|回复: 0

[原创] 数字排序与字符排序方式对比

[复制链接]
  • TA的每日心情
    慵懒
    12 小时前
  • 签到天数: 3156 天

    连续签到: 26 天

    [LV.Master]2000FPS

    发表于 2020-3-6 12:34:25 | 显示全部楼层 |阅读模式 来自:广东省东莞市 联通

    注册登陆后可查看附件和大图,以及购买相关内容

    您需要 登录 才可以下载或查看,没有账号?注册会员

    x
    今天有个教程客户说我的视频教程在U盘里的排序不对,如果前面的是3.1.1节,下一节应该是3.1.2节才对,但是实际出现的是3.1.10节,一直到3.1.19节后才会出现3.1.2节。这里面,其实涉及到的是数字排序与字符排序的问题。因为按照数字排序,1后面,确实是2.3..9,然后才是10。但是如果按照字符排序,他是逐个字符位排序的(原则是按ASCII来处理),3.1.1前面这一段都是一样的,就全是在一起,当然3.1.10也是归于3.1.1这个开头的管。而3.1.2,则是另外一个范围了,这个只能归3.1.这样来管。我们可以来在LabVIEW中看一个简单的例子: QQ截图20200306120542.png
    排序问题
    QQ截图20200306121902.png
    数字排序与字符排序对比
    如上图所示,左边三个数组,是数字排序与字符排序的对比,数字排序后就是12...89,之后是10,11,这样按数字大小来排序的。而如果是字符,则是1,10,11,111,11111,然后再是2,20,2000这样子的,先比较第一个字符,再比较第二个字符。我们看图右边的两个数字,是纯字符串的,里面含有数字与字母,可以看到,先是数字、再是大写字母,再是小写字母,这里可以去查看一下ASCII码,数字是的范围是64-73,大字字母的范围是65-90,小写字母的范围是97-122。所以,数字在前,大写字母在中间,小写字母在最后,然后具体的数字、字母,则是按从小到大的顺序排的,因为对应的ASCII本身也是从小到大连续排列的。

    在Windows系统中,像章节号的名称,如果选择按文件名来排序时,其是按照数字来排序的,但是在Linux系统中,则是按照字符串来排序的(可以参考百度网盘):
    QQ截图20200306123008.png
    如上图所示,都是按文件名升序排序,左边的是百度网盘,它的服务器是用Linux来做的,这里的排序是按字符串来排序的,所以2开头的要小,无论是2,还是2019或2020啥的,都是2开头的,在前面,而后面的6/7/8则要大于前面的2,则在后面。而右边的是Windows系统下的排序,文件名中有数字时,则是按照数字大小来排序的,所以6、7、8等,要小于2009,2019之类的。当然,对于Linux中的排序,也不是说完全不能解决,只不过看起来有点怪怪的。我们可以在.1.2这样的章节前面加上个0,如3.1.01,3.1.02……3.1.09,3.1.10,3.1.11这样子来排序,那么01..09则要小于后面的10..19了。不过这样子写名称,总是比较怪异,3.1.01,很奇怪。。。
    示例LV2019SP1:
    数字排序与字符排序对比.vi (8.86 KB, 下载次数: 0)


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    LabVIEW HALCON图像处理入门教程(第二版)
    石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
    《LabVIEW Vision函数实例详解》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23
    LabVIEW图像处理教程
    机器视觉商城淘宝店铺
    视觉论坛充值赞助方法

    QQ|石鑫华视觉论坛 |网站地图

    GMT+8, 2024-3-29 19:32

    Powered by Discuz! X3.4

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表