Einzeiler, um STRUCT in MATLAB zu sortieren?

447
gatorback

Ich suche eine einzeilige MATLAB-Funktion / einen Befehl, um die Ausgabe von nach Datum zu sortieren:

filenames = dir(filenameSubstring); % retruns struct 

sortrows () ist für Matrizen und scheint darauf angewiesen zu sein, dass die Sortierspalte eine Zahl ist.

Vermeiden, das Rad neu zu erfinden und die Lagerkapazität von MATLAB zu nutzen. Wenn ein Einliner nicht möglich ist, werden prägnante Lösungen geschätzt.

AKTUALISIEREN

Zwei-Liner pro erster Kommentar im Mathworks-Blog :

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

1 Antwort auf die Frage

2
Sardar_Usama

Eine Lösung zu schaffen ist der erste Schritt. Die Lösung in Ihrem Beitrag funktioniert nur, wenn alle Daten aus demselben Monat und Jahr stammen.

Beispiel:

Wenn Sie diese Termine haben:

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

Ihr Code ordnet sie wie folgt an:

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

das ist eindeutig falsch.

Ihr Code kann datetimewie folgt korrigiert werden (eingeführt in R2014b):

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

Einzeiler sind überbewertet. Jede Herangehensweise, um es zu einem Einliner zu machen, ist sehr wahrscheinlich schlechter als die vorstehende elegante Herangehensweise. Wenn Sie es nur in eine Zeile schreiben möchten, schreiben Sie es in eine Zeile als:

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

oder erstellen Sie eine Funktion, die das ausführt, und rufen Sie diese Funktion auf

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

und rufen Sie diese Funktion auf mit:

filenames = sortbydate(filenames); 
Gute Beobachtung. gatorback vor 5 Jahren 1