1

Поиск однострочной функции / команды MATLAB для сортировки по дате:

filenames = dir(filenameSubstring);  % retruns struct

sortrows() предназначен для матриц и, кажется, полагается, что столбец сортировки является числом.

Стараясь не изобретать велосипед и не использовать складские возможности MATLAB. Если однострочник не возможен, тогда ценятся краткие решения.

ОБНОВИТЬ

Два лайнера за первый комментарий в блоге Mathworks:

%% Sort the struct by file save date
[tmp ind]=sort({filenames.date});
filenames=filenames(ind);

1 ответ1

2

Создание решения - это первый шаг. Решение в вашем посте работает, только если все даты относятся к одному и тому же месяцу и году.

Пример:

Если у вас есть эти даты:

'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);

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .