3
float[float] aa = [2.2:7.7, 3.3:6.6, 1.1:4.4];
std.sort(aa);
assert(aa == [1.1:4.4, 2.2:7.7, 3.3:6.6]);

以上不起作用。怎么排序aa到位?

4

2 回答 2

7

D 的内置关联数组是哈希表。它们是未排序的,对它们进行排序是没有意义的。唯一有意义的排序是在遍历 AA 时,并且要做到这一点需要将它们放入一个新容器中。所以,你可以做类似的事情

auto keys = aa.keys;
sort(keys);

但你不能对 AA 本身进行排序。如果你想要一个排序的地图,那么你需要使用类似的东西std.container.RedBlackTree- 虽然它确实需要一些工作才能使它作为一个地图而不是一个集合(例如,排序功能必须只对键进行排序,并且在传递时一些函数的东西,你需要一个带有虚拟值的元组)。

这就是为什么 Java 有 aHashMap和 aSortedMap以及为什么 C++ 有unordered_map(C++11) 和map. 它们都是地图,它们具有非常不同的特征——尤其是在排序和查找时间方面。

于 2012-04-08T06:12:56.253 回答
6

你不能——这没有意义。

关联数组也称为“字典”或“地图”;D 中的特殊变化是哈希表。它们不是数组。对它们进行排序会破坏它们为您提供快速查找时间的能力。

如果您需要快速查找时间,请考虑RedBlackTree改用。

于 2012-04-08T05:36:50.793 回答