首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用自定义比较器对Vala中的列表进行排序

如何使用自定义比较器对Vala中的列表进行排序
EN

Stack Overflow用户
提问于 2013-01-13 15:43:44
回答 2查看 474关注 0票数 1

我正在尝试获取一个目录列表,并使用Vala将其排序为上次修改的时间顺序。

我已经将目录列表部分放入列表< FileInfo >中。但我想不出如何对列表进行排序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-14 07:17:13

这是通过List类中的sort(CompareFunc<G> compare_func)方法完成的。你可以阅读更多关于它的here

字符串的基本示例如下:

代码语言:javascript
复制
list.sort((a,b) => {
    return a.ascii_casecmp(b);
});

传递给sort()的函数返回值与ISO C90 qsort(3)函数相同:

如果第一个参数分别被认为小于、等于或大于第二个参数,则比较函数必须返回一个小于、等于或大于零的整数。

因为您对modify time感兴趣,所以您要查找的FileAttributeTIME_MODIFIED,您可以通过调用FileInfo的适当get_attribute_*方法来获得它。

票数 4
EN

Stack Overflow用户

发布于 2013-01-14 16:34:04

代码语言:javascript
复制
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;

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14301601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档