Matlab 针对结构体(struct)中某个成员排序

想对文件中所有图片按顺序(1.png;2.png;…1001.png;…1010.png.)读取后叠加,无奈你会发现在用dir读取的files.name的特性中,排序放式并不是你想要的1,2…,100,这种方式,而是1,1001,1010,…,2,…这种方式。只能先对dir读取的files进行处理,因为files是结构体,所以涉及到针对结构体中的一个成员排序。如果图片名字是1.png;2.png;…1001.png;…1010.png,还好做直接一顿操作猛如虎,但我图片名字是c1.png;c2.png;…c1001.png;…c1010.png,没办法┐(゚~゚)┌,只能一步一步来。

先来处理简单的,如果struct中name是1.png;2.png;…1001.png;…1010.png,其关键是对sort()函数的理解和运用。

files = dir('D:\Matlab workplace\*.png');
[~,index] = sort([files.name]);
newfiles=files(index);
%当然index也可以换成index(:)

再来处理复杂的,c1.png;c2.png;…c1001.png;…c1010.png
首先理清思路,我们是想用名字中的数字进行对结构体再排序,所以如何取出数字是关键。name是字符串,我们只需要取出从第二位一直到倒数第四位就可以了。这时要用到str2num()和eval()函数,具体使用方法见下方链接其他大佬们的博文。

files = dir('D:\*.png');
for i = 1 : numel(files)
numsort(i)=str2num(files(i).name(2:eval('length(files(i).name)-4')));
end
[~,ind]=sort(numsort);
newfiles=files(index);
%也可以一个一个赋值
%for i = 1 : numel(files)
% newfiles(i)=files(ind(i));   
%end

参考博文1 MATLAB sort函数用法 https://www.cnblogs.com/zhangziyan/p/8822231.html
参考博文2 matlab中eval用法 https://blog.csdn.net/qq_38412868/article/details/79185883

你可能感兴趣的:(Matlab,经验分享)