Une ligne pour trier STRUCT dans MATLAB?

1

Recherche d'une fonction / commande MATLAB à une ligne pour trier par date la sortie de:

filenames = dir(filenameSubstring);  % retruns struct

sortrows () est pour les matrices et semble s'appuyer sur la colonne de tri pour être un nombre.

Nous cherchons à éviter de réinventer la roue et à utiliser les capacités de stock de MATLAB. Si une ligne n'est pas possible, des solutions concises sont alors appréciées.

METTRE À JOUR

Deux lignes par premier commentaire en Blog Mathworks :

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

Réponses:

2

Faire un travail de solution est la première étape. La solution dans votre message ne fonctionne que si toutes les dates sont du même mois et de la même année.

Exemple:

Si vous avez ces dates:

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

votre code les organise comme suit:

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

ce qui est clairement faux.

Votre code peut être corrigé en utilisant datetime (introduit dans R2014b) comme suit:

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

Les doublures sont surévaluées. Toute approche visant à en faire un one-line est très probablement pire que l'approche élégante ci-dessus. Si vous voulez juste l'écrire sur une ligne, écrivez-le ainsi:

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

ou créez une fonction qui fait cela et appelez cette fonction i.e.

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

et appelez cette fonction avec:

filenames = sortbydate(filenames);
Sardar_Usama
la source
1
Bonne observation.
gatorback