1

ディレクトリリストを取得し、Valaを使用して最後に変更された時間順に並べ替えようとしています。

ディレクトリリストの部分をList<FileInfo>に入れました。しかし、リストを並べ替える方法がわかりません。

4

2 に答える 2

4

これは、クラスのsort(CompareFunc<G> compare_func)メソッドを介して行われます。あなたはここでListそれについてもっと読むことができます。

文字列の基本的な例は次のとおりです。

list.sort((a,b) => {
    return a.ascii_casecmp(b);
});

渡される関数の戻り値は、sort()ISOC90qsort(3)関数と同じです。

比較関数は、最初の引数がそれぞれ2番目の引数よりも小さい、等しい、または大きいと見なされる場合、ゼロより小さい、等しい、またはより大きい整数を返す必要があります。

時間の変更に関心があるので、FileAttribute探しているのはTIME_MODIFIEDです。これは、の適切なget_attribute_*メソッドを呼び出すことで取得できますFileInfo

于 2013-01-13T23:17:12.830 に答える
0
static int main (string[] args) {
var directory = File.new_for_path ("/var/db/pkg");
var glib_list = new GLib.List<FileInfo> ();
try {
    var enumerator = directory.enumerate_children (FileAttribute.TIME_MODIFIED, FileQueryInfoFlags.NOFOLLOW_SYMLINKS);
    FileInfo file_info;
    while ((file_info = enumerator.next_file()) != null) {
        glib_list.append(file_info);
    }
} catch(Error e) {
    stderr.printf ("Error: %s\n", e.message);
}
// Lets sort it.
CompareFunc<FileInfo> my_compare_func = (a, b) => {
    long c = a.get_modification_time().tv_sec;
    long d = b.get_modification_time().tv_sec;
    return (int) (c > d) - (int) (c < d);
};
glib_list.sort(my_compare_func);
foreach (FileInfo file_info in glib_list) {
    stdout.printf ("%s\n", file_info.get_name());
}
return 0;

}

于 2013-01-14T08:34:03.833 に答える