Однострочник для сортировки STRUCT в MATLAB?

357
gatorback

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

filenames = dir(filenameSubstring); % retruns struct 

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

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

ОБНОВИТЬ

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

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

1 ответ на вопрос

2
Sardar_Usama

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

Пример:

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

'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 = filenames(ind); 

Однострочники переоценены. Любой подход, чтобы сделать его однострочным, скорее всего, будет хуже, чем вышеупомянутый элегантный подход. Если вы просто хотите написать это в одной строке, то напишите в одной строке как:

[~, ind] = sort(datetime()); filenames = filenames(ind); 

или создать функцию, которая делает это, и вызвать эту функцию, т.е.

function filenames = sortbydate(filenames) [~, ind] = sort(datetime()); filenames = filenames(ind); end 

и вызвать эту функцию с помощью:

filenames = sortbydate(filenames); 
Хорошее наблюдение. gatorback 5 лет назад 1

Похожие вопросы