One-liner para classificar STRUCT em MATLAB?

1

Buscando uma função / comando do MATLAB de uma linha para ordenar por data a saída de:

filenames = dir(filenameSubstring);  % retruns struct

sortrows () é para matrizes e parece confiar na coluna de classificação como um número.

Buscando evitar reinventar a roda e usar a capacidade de estoque do MATLAB. Se um one-liner não for possível, então soluções concisas são apreciadas.

UPDATE

Two-Liner por primeiro comentário no blog do Mathworks :

%% Sort the struct by file save date
[tmp ind]=sort({filenames.date});
filenames=filenames(ind);
    
por gatorback 11.06.2018 / 23:25

1 resposta

2

Fazer um trabalho de solução é o primeiro passo. A solução na sua postagem funciona somente se todas as datas forem do mesmo mês e ano.

Exemplo:

Se você tiver essas datas:

'18-May-2017 01:01:36'
'18-Jun-2018 22:58:50'
'19-Jun-2018 01:52:32'

seu código organiza-os como:

'18-Jun-2018 22:58:50'
'18-May-2017 01:01:36'
'19-Jun-2018 01:52:32'

que está claramente errado.

Seu código pode ser corrigido usando datetime (introduzido no R2014b) da seguinte maneira:

[~, ind] = sort(datetime({filenames.date}));
filenames = filenames(ind);

Os one-liners são superestimados. Qualquer abordagem para torná-lo uma linha é muito provavelmente pior do que a abordagem elegante acima. Se você quiser apenas escrevê-lo em uma linha, escreva-o em uma linha como:

[~, ind] = sort(datetime({filenames.date}));  filenames = filenames(ind);

ou crie uma função que faça isso e chame essa função, por exemplo

function filenames = sortbydate(filenames)
[~, ind] = sort(datetime({filenames.date}));
filenames = filenames(ind);
end

e chame esta função com:

filenames = sortbydate(filenames);
    
por 18.06.2018 / 23:26