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
到位?
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
到位?
D 的内置关联数组是哈希表。它们是未排序的,对它们进行排序是没有意义的。唯一有意义的排序是在遍历 AA 时,并且要做到这一点需要将它们放入一个新容器中。所以,你可以做类似的事情
auto keys = aa.keys;
sort(keys);
但你不能对 AA 本身进行排序。如果你想要一个排序的地图,那么你需要使用类似的东西std.container.RedBlackTree
- 虽然它确实需要一些工作才能使它作为一个地图而不是一个集合(例如,排序功能必须只对键进行排序,并且在传递时一些函数的东西,你需要一个带有虚拟值的元组)。
这就是为什么 Java 有 aHashMap
和 aSortedMap
以及为什么 C++ 有unordered_map
(C++11) 和map
. 它们都是地图,它们具有非常不同的特征——尤其是在排序和查找时间方面。
你不能——这没有意义。
关联数组也称为“字典”或“地图”;D 中的特殊变化是哈希表。它们不是数组。对它们进行排序会破坏它们为您提供快速查找时间的能力。
如果您需要快速查找时间,请考虑RedBlackTree
改用。