访问哈希表作为D中的值排序范围



如果我有一个哈希表File[string] _subs,并且想要以排序的方式访问它的值,有没有比简单地通过更好的方法

auto ssubs = new File[_subs.length]; // preallocate sorted subs
size_t ix = 0;
foreach (sub; _subs) {
    ssubs[ix++] = sub;  // set new reference to sub
}
ssubs.sort!((a, b) => (a.timeLastModified >
                       b.timeLastModified));
return ssubs;

我建议跳过foreach循环,使用.values,如下所示:

auto ssubs = _subs.values.sort!((a, b) => (a.timeLastModified > b.timeLastModified));

我认为最好不要在元素之间添加依赖项(比如for循环),当它们不需要的时候。原因是没有它更容易使代码并行。

如果你发现自己经常做这种操作,可以考虑尝试std.container中的RedBlackTree。这是通常的排序与运行时复杂性的权衡:访问和插入元素到无序哈希映射(hashset)(如AA)中是O(1),而在有序映射(set)(例如RedBlackTree)上的相同操作是O(log(n))。

最新更新