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的内置关联数组是hash tables。它们是未分类的,对它们进行分类是没有意义的。只有在遍历AA时,排序才会有意义,并且需要将它们放入新的容器中。所以,你可以做类似
auto keys = aa.keys;
sort(keys);
但你不能排序AA本身。如果你想要一个有排序的地图,那么你需要使用像std.container.RedBlackTree
这样的东西 - 尽管它需要一点工作来使它起到一个映射而不是一个集合的作用(例如,排序函数只能在键上排序,将东西传递给一些函数,你需要一个带有虚拟值的元组)。
这就是为什么Java有HashMap
和SortedMap
以及为什么C++有unordered_map
(C++ 11)和map
。它们都是地图,它们都具有非常不同的特征 - 特别是在排序和查找时间方面。
你不能 - 它没有意义。
关联数组也被称为“词典”或“地图”; D中的特定变体是散列表。他们是而不是阵列。排序他们将打破他们的能力给你一个快速的查找时间。
如果您需要快速查找时间,请考虑使用RedBlackTree
代替。
您是否需要给定顺序的rsults,或者您是否需要检查两个不同的AA实例是否相同? – BCS 2012-04-08 16:09:37
@我需要给定顺序的结果,就像'std :: map'一样。我可能最终会使用'std.container'。 – Arlen 2012-04-08 17:14:25