寻求一行 MATLAB 函数/命令按日期对输出进行排序:
filenames = dir(filenameSubstring); % retruns struct
排序()用于矩阵,并且似乎依赖于排序列为数字。
力求避免重复工作并使用 MATLAB 的现有功能。如果无法使用一行代码,那么简洁的解决方案将不胜感激。
更新
第一条评论两行Mathworks 博客:
%% Sort the struct by file save date
[tmp ind]=sort({filenames.date});
filenames=filenames(ind);
答案1
让解决方案奏效是第一步。您帖子中的解决方案只有在所有日期都来自同一个月和年份时才有效。
例子:
如果您有以下日期:
'18-May-2017 01:01:36'
'18-Jun-2018 22:58:50'
'19-Jun-2018 01:52:32'
您的代码将它们排列为:
'18-Jun-2018 22:58:50'
'18-May-2017 01:01:36'
'19-Jun-2018 01:52:32'
这显然是错误的。
您可以使用以下方法修复代码datetime
(R2014b 中引入)如下:
[~, ind] = sort(datetime({filenames.date}));
filenames = filenames(ind);
单行代码被高估了。任何使它成为单行代码的方法很可能比上述优雅的方法更糟糕。如果你只想用一行代码编写,那么请用一行代码编写:
[~, ind] = sort(datetime({filenames.date})); filenames = filenames(ind);
或者创建一个执行该操作的函数并调用该函数,即
function filenames = sortbydate(filenames)
[~, ind] = sort(datetime({filenames.date}));
filenames = filenames(ind);
end
并使用以下命令调用该函数:
filenames = sortbydate(filenames);