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