石鑫华视觉 发表于 2020-3-6 12:34:25

数字排序与字符排序方式对比

今天有个教程客户说我的视频教程在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中看一个简单的例子:
排序问题

数字排序与字符排序对比
如上图所示,左边三个数组,是数字排序与字符排序的对比,数字排序后就是12...89,之后是10,11,这样按数字大小来排序的。而如果是字符,则是1,10,11,111,11111,然后再是2,20,2000这样子的,先比较第一个字符,再比较第二个字符。我们看图右边的两个数字,是纯字符串的,里面含有数字与字母,可以看到,先是数字、再是大写字母,再是小写字母,这里可以去查看一下ASCII码,数字是的范围是64-73,大字字母的范围是65-90,小写字母的范围是97-122。所以,数字在前,大写字母在中间,小写字母在最后,然后具体的数字、字母,则是按从小到大的顺序排的,因为对应的ASCII本身也是从小到大连续排列的。

在Windows系统中,像章节号的名称,如果选择按文件名来排序时,其是按照数字来排序的,但是在Linux系统中,则是按照字符串来排序的(可以参考百度网盘):

如上图所示,都是按文件名升序排序,左边的是百度网盘,它的服务器是用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:



inms 发表于 2024-11-10 00:24:59

6666666666666666666666666
页: [1]
查看完整版本: 数字排序与字符排序方式对比

LabVIEW HALCON图像处理入门教程(24.09)
石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
《LabVIEW Vision函数实例详解2020-2024》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24