D 如何对关联数组排序?

D 如何对关联数组排序?,d,D,上述方法不起作用。一个排序是如何进行的呢?你不能——这没有意义 关联数组也称为“字典”或“映射”;D中的特殊变化是一个哈希表。它们是而不是数组。对它们进行排序会破坏它们为您提供快速查找时间的能力 如果需要快速查找时间,可以考虑使用。 < P> D的内置关联数组是。它们是未分类的,对它们进行分类是没有意义的。排序唯一有意义的时间是在AA上迭代时,要做到这一点,需要将它们放在一个新的容器中。所以,你可以这样做 float[float] aa = [2.2:7.7, 3.3:6.6, 1.1:4.4]

上述方法不起作用。一个排序是如何进行的呢?

你不能——这没有意义

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


如果需要快速查找时间,可以考虑使用。

< P> D的内置关联数组是。它们是未分类的,对它们进行分类是没有意义的。排序唯一有意义的时间是在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本身进行排序。如果您想要一个排序的映射,那么您需要使用类似这样的东西-尽管将其作为一个映射而不是一个集合来运行确实需要一些工作(例如,排序函数必须只按键排序,并且当将内容传递给某些函数时,您需要一个具有伪值的元组)


这就是为什么java有< HashMap > <代码>和<代码> SortedMap < />代码以及为什么C++有<代码>无序的映射> <代码>(C++ 11)和<代码> map < /C> >。它们都是映射,它们都有非常不同的特征——特别是在排序和查找时间方面。

std::map
已排序,而
std::unordered\u map
未排序。与其称之为关联数组,不如称之为
hash
。@Arlen关联数组是一个非常有效的术语。就我个人而言,我会称之为哈希表,但称之为关联数组是非常准确的:@Arlen:它也称之为关联数组。你需要以给定的顺序显示结果,还是只需要检查两个不同的AA实例是否相等?@我需要以给定的顺序显示结果,就像
std::map
。我可能最终会使用
std.container
auto keys = aa.keys;
sort(keys);