我之前在处理文件时碰到这样一种情况。文件名是按步长逐一递增的整数,可是在使用内置函数排序之后发现文件名顺序出现下图的异常(0,100,1000,120...不是自然顺序)。其实这可以理解,因为文件名是字符串,其排序的基准应该是字符的 ASCII 值。
怎么解决呢?自然排序(natural sort)。这里推荐经过我长时间考验的几个函数。
注意:这几个函数不是内置函数,请自行下载,并将路径添加到 MATLAB 的路径中。
Natural-Order Filename Sort:自然排序带数字的文件名字符串
Natural-Order Filename Sort - File Exchange - MATLAB Centralwww.mathworks.comCustomizable Natural-Order Sort:自然排序带数字的字符串
Customizable Natural-Order Sort - File Exchange - MATLAB Centralww2.mathworks.cnNatural-Order Row Sort:按行自然排序带数字的字符串
Natural-Order Row Sort - File Exchange - MATLAB Centralww2.mathworks.cn帮助文档里面有详细的函数参数和返回值说明。我之前遇到的问题也就迎刃而解了。
首先获取文件名,然后按 name 域自然排序并取其索引,最后按索引重建 struct。
file_names