在 MatLab 中从目录中排序结构

sort a struct from dir in MatLab

在 MatLab 中(我得到的是 2014b 版,但我可以轻松更新到 2015..)你得到了函数dir(PATH),你可以从中接收目录内容作为结构。

现在我的问题是,结构中的条目没有按文件名排序。 在我的程序中,我让用户 select 一个带有 uigetFile 的文件,文件在那里按名称排序(由 OS 完成)。因此用户可能 select 对话中的第一个文件但不是 fileList.

中的第一个文件

所以我的问题是,uigetfile 对话框中的文件排序与 dir returns.

函数不同

如何实现结构排序或打开对话中的文件像从 dir 接收到的结构一样排序?

这是我在 fileList 中的结构目录:

'.'                 '22-Sep-2015 09:38:42'  0           true    736229,401875000
'..'                '17-Sep-2015 15:23:37'  0           true    736224,641400463
'JV_1914_0001.tif'  '21-Sep-2015 09:58:39'  720932      false   736228,415729167
'JV_1914_0003.tif'  '06-Mrz-2011 18:49:36'  29844547    false   734568,784444445
'JV_1914_0004.tif'  '06-Mrz-2011 18:49:44'  30382304    false   734568,784537037
'JV_1914_0005.tif'  '06-Mrz-2011 18:49:50'  30389081    false   734568,784606481
'JV_1914_0006.tif'  '06-Mrz-2011 18:49:58'  30436100    false   734568,784699074
'JV_1914_0007.tif'  '06-Mrz-2011 18:50:06'  30442889    false   734568,784791667
'JV_1914_0008.tif'  '06-Mrz-2011 18:50:14'  31125589    false   734568,784884259
'JV_1914_0009.tif'  '06-Mrz-2011 18:50:22'  31132367    false   734568,784976852
'JV_1914_0010.tif'  '06-Mrz-2011 18:50:30'  31080335    false   734568,785069444
'JV_1914_0011.tif'  '06-Mrz-2011 18:50:36'  31087112    false   734568,785138889
'JV_1914_0012.tif'  '06-Mrz-2011 18:50:44'  30237671    false   734568,785231482
'JV_1914_0013.tif'  '06-Mrz-2011 18:50:52'  30244449    false   734568,785324074
'JV_1914_0014.tif'  '06-Mrz-2011 18:51:00'  30282806    false   734568,785416667
'JV_1914_0015.tif'  '06-Mrz-2011 18:51:08'  30289585    false   734568,785509259
'JV_1914_0016.tif'  '06-Mrz-2011 18:51:16'  30294053    false   734568,785601852
'JV_1914_0017.tif'  '06-Mrz-2011 18:51:24'  30300833    false   734568,785694444
'JV_1914_0018.tif'  '06-Mrz-2011 18:51:32'  30300833    false   734568,785787037
'ccc.tif'           '08-Sep-2015 21:28:44'  23332298    false   736215,894953704

如您所见,文件 ccc.tif 在列表末尾,而它在 uigetfile 的对话中排在首位(按名称排序 - 我猜可能是 OS-具体)

一般,我不认为MATLAB 可以确定文件在uigetfile 对话框中的排序方式。至少在 Windows 中,用户可以选择按名称、日期、大小和类型对对话进行排序,并且不会向 MATLAB 返回有关所选排序方法的信息。

根据您的具体需要,如果您只需要 ccc 排在 JV... 之前,那么这可能会有所帮助:

dir returns 'ccc''JV...' 之后,因为 MATLAB 将大写字母排在小写字母之前。如果那确实是你唯一的问题:

files   = dir('*.txt'); 
names   = {files.name};
[~,idx] = sort(lower(names));
names   = names(idx);

lowernames 中的所有内容都变成小写,这样大小写就不再是问题了。 [~,idx]=sort() returns 敏感列表中排序的大小写的索引,用于对实际列表重新排序。