如果我有一个哈希表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;
答案 0 :(得分:3)
我建议跳过foreach循环并使用.values
,如下所示:
auto ssubs = _subs.values.sort!((a, b) => (a.timeLastModified > b.timeLastModified));
我认为最好不要在元素之间添加依赖关系(比如使用for循环),当他们不需要它时。这样做的原因是没有它就可以更容易地使代码并行。
答案 1 :(得分:3)
如果您发现自己经常进行此操作,请考虑从std.container尝试RedBlackTree
。这是通常的排序与运行时复杂度之间的权衡:虽然访问和插入无序散列图(散列集)中的元素(如AA)是O(1),但像RedBlackTree这样的有序映射(集合)上的相同操作是O(log(n) ))。