如何对关联数组进行排序?

Arl*_*len 3 d

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]);
Run Code Online (Sandbox Code Playgroud)

以上不起作用.如何排序aa到位?

Jon*_*vis 7

D的内置关联数组是哈希表.它们没有被排序,对它们进行排序是没有意义的.排序有意义的唯一时间是迭代AA,并且需要将它们放入新容器中.所以,你可以做点什么

auto keys = aa.keys;
sort(keys);
Run Code Online (Sandbox Code Playgroud)

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

这就是为什么Java有一个HashMap和一个SortedMap以及为什么C++有unordered_map(C++ 11)和map.它们都是地图,它们具有非常不同的特征 - 特别是在排序和查找时间方面.


Meh*_*dad 6

你不能 - 它没有意义.

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

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