it-swarm-ja.com

MATLABでSTRUCTをソートするためのワンライナー?

以下の出力を日付でソートするためのワンライナーMATLAB関数/コマンドを探しています。

filenames = dir(filenameSubstring);  % retruns struct

sortrows()は行列用であり、並べ替え列が数値であることに依存しているようです。

車輪の再発明やMATLABのストック機能の使用を回避しようとしています。ワンライナーが不可能な場合は、簡潔な解決策をお勧めします。

更新

Mathworksブログ の最初のコメントごとに2ライナー:

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

ソリューションを機能させることが最初のステップです。投稿の解決策は、すべての日付が同じ月と年のものである場合にのみ機能します。

例:

これらの日付がある場合:

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

ワンライナーは過大評価されています。それをワンライナーにするためのアプローチは、上記のエレガントなアプローチよりも悪い可能性が非常に高いです。 1行で記述したい場合は、次のように1行で記述します。

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

または、それを実行する関数を作成し、その関数を呼び出します。

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

そして、この関数を次のように呼び出します。

filenames = sortbydate(filenames);
2
Sardar_Usama